猿问

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

假设我有课程:


class A : SuperType() {}


class B : SuperType() {}


class C : B() {}

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


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


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


class B(whatever_it_receives_as_long_as_child_of_SuperType) : whatever_it_receives_as_long_as_child_of_SuperType()


class C : A(B())    // B is subtype of SuperType so it's ok


一只甜甜圈
浏览 116回答 2
2回答

小怪兽爱吃肉

如何在编译时生成 A 扩展 B()(或 SuperType() 的任何子级),而不仅仅是 SuperType()?你不能。每个类只能扩展一个固定的超类。我认为你能得到的最接近的是class A(x: SuperType): SuperType by x(请参阅文档)但这需要SuperType是一个接口而不是一个类。

呼如林

您可以执行以下操作: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())
随时随地看视频慕课网APP

相关分类

Java
我要回答