私は抽象クラスを持っている:拡張クラスのコンパニオンオブジェクトコンポーネントが表示されないのはなぜですか?
と拡張クラス:
Vec2t
には、以下のcompanion objectがあります
companion object {
@JvmField val length = 2
}
しかし、私はVec2.length
を入力し、それはママです未解決の参照としてrked ...
なぜですか?私は何が欠けていますか?
私は抽象クラスを持っている:拡張クラスのコンパニオンオブジェクトコンポーネントが表示されないのはなぜですか?
と拡張クラス:
Vec2t
には、以下のcompanion objectがあります
companion object {
@JvmField val length = 2
}
しかし、私はVec2.length
を入力し、それはママです未解決の参照としてrked ...
なぜですか?私は何が欠けていますか?
コトルでは、companion object
はクラス内に特別にマークされたobject
です。名前を省略すると、既定の名前はCompanion
になり、MyClass.Companion.myProperty
ではなくMyClass.myProperty
の構文を使用してメンバーにアクセスできるという便利さも得られます。しかし、まだ入れ子になっているのはobject
です。
length
Vec2t.LengthKeeper.length
を経由してアクセスすることができました
abstract class Vec2t {
object LengthKeeper {
val length = 2
}
}
class Vec2 : Vec2t()
は、もちろん、あなたはので、Vec2.LengthKeeper.length
としてそれにアクセスすることができませんでしたVec2
クラスには、LengthKeeper
というネストされたオブジェクトがありません。
バイトコードにVec2t
内length
のための静的変数を生成しないコンパニオンオブジェクト@JvmStatic
内部変数をマーキングしていますが、アクセスのみ可能という書き込みをあなたのコードで実際の作業ではありません次のJava、から:
Vec2 v = new Vec2();
int length = Vec2.getLength();
あなたが本当にその構文で
Vec2
を通じて、基本クラスのプロパティにアクセスする必要がある場合は、Kotlinでこれを解決するためのよう
、あなたはおそらくこのような何かをする必要があります:
class Vec2 : Vec2t() {
companion object {
val length get() = Vec2t.length
}
}
うん、それは感謝します、ありがとう – elect
何をお話しますか? 'Vec2t'にはコンパニオンオブジェクトはなく、' Vec2'のコンパニオンオブジェクトは、あなたが上で与えたものと同じではありません。 – glee8e
もう一度チェックして、あなたの '長さ'が実際には 'SIZE'という名前になっているのを見ました。 – glee8e
申し訳ありませんが、古いコード、私はちょうど押した – elect