【发布时间】:2016-02-26 12:32:11
【问题描述】:
我正在尝试创建几个类的层次结构,每个类都覆盖其父级内部类中的某些行为(特别是迭代器,但没关系)。基本上,它看起来像这样:
open class SuperClass<T>{
protected open inner class InnerClass{
fun someLogic(){
println("some logic happened")
}
open fun someOverridableLogic(){
println("some logic happened")
}
}
}
class ChildClass<T> : SuperClass<T>(){
protected inner class ChildInnerClass:InnerClass{
override fun someOverridableLogic(){
super.someOverridableLogic()
println("some OTHER logic happened")
}
}
}
编译器拒绝使用此代码,当 ChildInnerClass 从它继承时,期望 InnerClass 上的类型参数。但是,添加这样的参数后:
protected inner class ChildInnerClass:InnerClass<T>
编译器突然不期待任何类型参数!
Java 等价物按预期编译和执行,没有类型参数:
public class SuperClass<T> {
protected class InnerClass{
public void someLogic(){
System.out.println("some logic happened");
}
public void someOverridableLogic(){
System.out.println("some logic happened");
}
}
}
public class ChildClass<T> extends SuperClass<T>{
protected class ChildInnerClass extends InnerClass{
@Override
public void someOverridableLogic() {
super.someOverridableLogic();
System.out.println("some OTHER logic happened");
}
}
}
那么,我是在 Kotlin 中做错了什么,还是仅仅是我不知道的语言限制?
【问题讨论】:
标签: kotlin