为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2022-06-15 17:12:38
假设我有课程: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
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

如何在编译时生成 A 扩展 B()(或 SuperType() 的任何子级),而不仅仅是 SuperType()?

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

我认为你能得到的最接近的是

class A(x: SuperType): SuperType by x

(请参阅文档)但这需要SuperType是一个接口而不是一个类。


查看完整回答
反对 回复 2022-06-15
?
呼如林

TA贡献1798条经验 获得超3个赞

您可以执行以下操作:


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())


查看完整回答
反对 回复 2022-06-15
  • 2 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信