ele*_*ect 3 kotlin companion-object
我有一个抽象类:
和扩展类:
Vec2t有以下配套对象:
companion object {
@JvmField val length = 2
}
Run Code Online (Sandbox Code Playgroud)
但是当我输入时Vec2.length,它被标记为未解决的参考...
为什么?我错过了什么?
在Kotlin,a companion object只是object你班上特别标记的.您可以省略其名称,它将获得默认名称Companion,并且您还可以方便地使用MyClass.myProperty语法而不是MyClass.Companion.myProperty访问其成员.然而,它仍然只是一个嵌套object.
想象一下,如果它是一个常规的嵌套对象而不是一个伴侣,事情将如何工作:
abstract class Vec2t {
object LengthKeeper {
val length = 2
}
}
class Vec2 : Vec2t()
Run Code Online (Sandbox Code Playgroud)
您可以访问lengthvia Vec2t.LengthKeeper.length,但当然您无法访问它Vec2.LengthKeeper.length,因为Vec2该类没有调用嵌套对象LengthKeeper.
在伴随对象内部标记变量@JvmStatic确实会在字节码中为length内部生成一个静态变量Vec2t,但是您只能从Java访问它,其中编写以下内容实际上与您的代码一起使用:
Vec2 v = new Vec2();
int length = Vec2.getLength();
Run Code Online (Sandbox Code Playgroud)
至于在Kotlin中解决这个问题,如果你真的必须通过Vec2这种语法访问基类的属性,你可能必须做这样的事情:
class Vec2 : Vec2t() {
companion object {
val length get() = Vec2t.length
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |