私は最近、initブロックを使用してコンストラクタで値を割り当てても、私の標準変数の値がデフォルトの値に置き換えられるという状況に遭遇しました。私がいた試した何Kotlinクラスの初期ブロック位置
:
class Example(function: Example.() -> Unit) {
init {
function()
}
var name = "default name"
}
// assigning it like this:
val example = Example { name = "new name" }
// print value
print(example.name) // prints "default name"
少し苦労した後、私は、initブロック事項の位置ということを発見しました。クラスの最後にinitブロックを置くと、最初にデフォルトの名前で初期化された後、function()が呼び出され、その値が「新しい名前」に置き換えられます。
最初に置くと名前が見つからず、プロパティが初期化されるときに "デフォルト名"に置き換えられます。
これは私にとっては奇妙なことです。なぜこれが起こったのか誰も説明できますか?
クラスの初期化がトップダウンで正しい方法であると、initブロックが免除されていません。 –
この練習はコトルの初期化を理解するだけでしたか?そうでない場合は、 'class Example(val name:String =" default name ")でこれを実現できます。 – Mikezx6r
私のライブラリ(https://github.com/kirtan403/k4kotlin)でこれをやろうとしていましたが、それはトップに、全体の機能が壊れました。 – kirtan403