我有一種情況,我需要在Kotlin的類中定義一個靜態屬性,並且當它編譯爲Javascript時,它已成爲該類上的一個真正的靜態字段。在這種情況下,伴侶對象不起作用。如何在Kotlin for 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中設置像這樣的靜態字段?
如果您編譯到JVM有一個'@ JvmStatic'註解。也許這有一個相當於JS的? – Mibac
相關問題:https://youtrack.jetbrains.com/issue/KT-18891 – bashor
您可以在類上聲明靜態變量,但不能聲明抽象靜態變量。哪有這回事。 – Joshua