内部类inheritanceKotlin
我试图创建一个少数类的层次结构,每个类都覆盖父类的内部类中的一些行为(特别是迭代器,但没关系)。 基本上,它看起来像这样:
open class SuperClass{ protected open inner class InnerClass{ fun someLogic(){ println("some logic happened") } open fun someOverridableLogic(){ println("some logic happened") } } } class ChildClass : SuperClass(){ protected inner class ChildInnerClass:InnerClass{ override fun someOverridableLogic(){ super.someOverridableLogic() println("some OTHER logic happened") } } }
编译器拒绝使用此代码,当ChildInnerClassinheritance它时,需要InnerClass上的types参数。 但是,添加这样的参数后:
protected inner class ChildInnerClass:InnerClass
编译器突然不期待任何types的参数!
相当于Java的Java编译和按预期执行,没有types参数:
public class SuperClass { protected class InnerClass{ public void someLogic(){ System.out.println("some logic happened"); } public void someOverridableLogic(){ System.out.println("some logic happened"); } } } public class ChildClass extends SuperClass{ protected class ChildInnerClass extends InnerClass{ @Override public void someOverridableLogic() { super.someOverridableLogic(); System.out.println("some OTHER logic happened"); } } }
那么,我在Kotlin做错了什么,还是仅仅是一个我不知道的语言限制呢?
编译器不期望在InnerClass
上的types参数,但在SuperClass
中的SuperClass.InnerClass
。 这是一个已知的问题: 捕获内部类的generics:KT-9208 。
现在你可以做到以下几点:
open class SuperClass { protected open inner class InnerClass { fun someLogic() { println("some logic happened") } open fun someOverridableLogic() { println("some logic happened") } } } class ChildClass : SuperClass () { protected inner class ChildInnerClass : SuperClass .InnerClass() { override fun someOverridableLogic() { super.someOverridableLogic() println("some OTHER logic happened") } } }
对于类似的例子和答案,另请参阅Kotlin中的Hadoop上下文types参数 。