kotlin - Kotlin - 委托链
问题描述
在 Kotlin 中,是否可以有一个委托链?为了演示我想要实现的目标,这是修改后的 kotlin 文档中的示例( https://kotlinlang.org/docs/reference/delegation.html ):
interface Base {
fun print()
}
class BaseImpl(val x: Int) : Base {
override fun print() { println(x) }
}
class Derived(var b: Base, val someData: Float = 10f) : Base by b
class SecondDerived(var b: Base) : Base by b
fun main(args: Array<String>) {
val b = BaseImpl(10)
val derived = Derived(b)
val secondDerived: Base = SecondDerived(derived)
secondDerived.print()// prints 10
if (secondDerived is Derived) println(secondDerived.someData) //here secondDerived is Derived == false
}
我希望“secondDerived”属于“Derived”类型,但演员说不是。
我怀疑在内存中 secondDerived 基确实是 Derived 类型,但编译器看不到这一点。有什么办法可以让演员工作吗?
解决方案
在 JVM 上,一个类只能有一个超类,而 Kotlin 的类委托不会以任何方式改变它。它所做的只是生成Base
委托给Derived
实例的接口方法的实现。它不影响is
检查。
推荐阅读
- perl - 如何动态创建替换?
- python - sklearn 错误 - ValueError: bad input shape (330, 5)
- java - Junit Spring 避免加载两次应用程序上下文数据源
- excel - 更改excel单元格中文本的颜色
- angular - Angular App routerlinks 在开发中运行良好,但在生产中运行不正常?
- c++ - const_cast 不同的行为:原始类型与对象类型
- php - 在数据库中上传图像时文件名太长
- fiware - Fiware orion 日期格式无效
- css - 弹出不坚持保存文本
- c# - 如何在服务器端处理新的刷新令牌?