Kotlin:扩展动态给定的超类型

时间:2019-02-13 00:59:20

标签: java generics kotlin

假设我有以下课程:

class A : SuperType() {}

class B : SuperType() {}

class C : B() {}

假设我不再希望C扩展B():我希望它扩展A(),但是现在我希望A扩展B()

如何在编译时扩展A(或B()的任何子项)而不是仅扩展SuperType()?换句话说,如何使类SuperType()的声明通用,以接受A的任何子级?

希望很清楚。我想做类似的事情:

SuperType()

2 个答案:

答案 0 :(得分:1)

  

如何在编译时使A扩展B()(或SuperType()的任何子代)而不是仅扩展SuperType()?

不能。每个类只能扩展一个固定的超类。

我认为您可以得到的最接近的是

class A(x: SuperType): SuperType by x

(请参阅documentation),但这要求SuperType是接口而不是类。

答案 1 :(得分:0)

您可以执行以下操作:

open class SuperType {}
open class A(val obj: SuperType) : B() {}
open class B : SuperType() {}
class C : A(B())

或使用泛型:

open class SuperType {}
open class A<T: SuperType>(val obj: T) : B() {}
open class B : SuperType() {}
class C : A<B>(B())