2017-11-20 11 views
9
object Foo : CharSequence by Foo.X { 
    val X = "" 
} 

エラーを「変数が初期化されなければならない」

Variable 'X' must be initialized 

を生成しかし、それはです!コードは、

のように変換する必要があります。

エラーの原因とは何ですか?回避策がありますか?実際のコードの初期化では、Fooobject(実際には、コンパニオンオブジェクト)でなければならず、classでなければなりません。

答えて

1

私は、オブジェクトにクラス委任を使用することは少し明白ではないので、おそらくの本質はであると推測します。

回避策は、Stringのインスタンスに直接委譲することです。このコードは、私の作品:脇

fun main(args: Array<String>) { 
    println("Hello, world! ${Bar.Foo.indexOf("z")}") // Prints "2" 
} 

class Bar { 
    companion object Foo : CharSequence by String(StringBuilder("xyzzy")) { 
    } 
} 

:KotlinでStringはStringパラメータを取るコンストラクタを持っていません。奇妙な、それ。

+2

最後の文について:対応するJavaコンストラクタは、バージョン7u6から主な使用を失っていました(私が正しく覚えていれば、その範囲にあるはずです)。 Kotlinはそれをコピーする必要はありません。 –

+0

はい私は、上記のコードでそのコンストラクタを使用する必要はないことに気付きました。これは同等です: 'companionオブジェクトFoo:CharSequence by" xyzzy "' –

関連する問題