2

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フィールドが実際に静的に存在するようにします。MyClassMyClass

コンパニオン オブジェクトを使用してみましたが、別のオブジェクト/関数が呼び出されて作成されMyClass$Companionidフィールドがそれに割り当てられ、実際に静的に割り当てられることはありませんMyClass

Kotlin でこのような真の静的フィールドを設定するにはどうすればよいですか?

4

1 に答える 1