Kotlin のクラスで静的プロパティを定義する必要があり、Javascript にコンパイルすると、そのクラスの真の静的フィールドになります。この状況では、コンパニオン オブジェクトは機能しません。
たとえば、以下のような抽象クラスとその実装クラスがあるとします。
abstract class MyAbstractClass{
abstract val id: Int
}
class MyClass: MyAbstractClass(){
override val id: Int = 1 //I want this to actually be "static" on the MyClass
}
これがコンパイルされる Javascript は次のとおりです。
function MyAbstractClass() {
}
function MyClass() {
MyAbstractClass.call(this);
this.id_jz5fma$_0 = 1;
}
Object.defineProperty(MyClass.prototype, 'id', {
get: function () {
return this.id_jz5fma$_0;
}
});
しかし、コンパイルするために必要なのは次のとおりです。
function MyAbstractClass() {
}
function MyClass() {
MyAbstractClass.call(this);
}
MyClass.id = 1;
の新しいインスタンスを作成しなくても、id
フィールドが実際に静的に存在するようにします。MyClass
MyClass
コンパニオン オブジェクトを使用してみましたが、別のオブジェクト/関数が呼び出されて作成されMyClass$Companion
、id
フィールドがそれに割り当てられ、実際に静的に割り当てられることはありませんMyClass
。
Kotlin でこのような真の静的フィールドを設定するにはどうすればよいですか?