为什么我没有看到扩展类的伴侣对象组件?
我有一个抽象类:为什么我没有看到扩展类的伴侣对象组件?
和延伸类:
Vec2t
具有以下companion object:
companion object {
@JvmField val length = 2
}
但是当我键入Vec2.length
,那么它是可能的被认定为未解决的参考...
为什么?我错过了什么?
在Kotlin,companion object
仅仅是一个特别标记的object
在你的课堂内。您可以省略它的名称,并且它将获得默认名称Companion
,并且您还可以使用MyClass.myProperty
语法而不是MyClass.Companion.myProperty
来访问其成员,从而方便您使用它。然而,它仍然只是一个嵌套的object
。
试想一下,如果这是一个普通的嵌套对象,而不是伴侣的事情将如何工作:
abstract class Vec2t {
object LengthKeeper {
val length = 2
}
}
class Vec2 : Vec2t()
你可以访问length
通过Vec2t.LengthKeeper.length
,当然你不能访问它为Vec2.LengthKeeper.length
,因为Vec2
类没有名为LengthKeeper
的嵌套对象。
标记同伴对象@JvmStatic
内部变量不字节码生成内部Vec2t
用于length
一个静态变量,但你只能访问从Java,在写下面是实际可行的与您的代码:
Vec2 v = new Vec2();
int length = Vec2.getLength();
至于在科特林解决这个,如果你真的有通过Vec2
与语法访问基类的属性,你可能不得不做这样的事情:
class Vec2 : Vec2t() {
companion object {
val length get() = Vec2t.length
}
}
是的,这是有道理的,谢谢 – elect
你在说什么? “Vec2t”中没有伴侣对象,“Vec2”的比较对象看起来不像上面给出的。 – glee8e
我再次检查,我看到你的'长度'可能实际上被命名为'SIZE'。 – glee8e
对不起,旧代码,我只是推 – elect