1. ホーム
  2. kotlin

[解決済み] kotlinのinitブロックとコンストラクタの違いは何ですか?

2023-05-17 22:10:05

質問

Kotlinの勉強を始めました。の違いを知りたいです。 init ブロックと constructor . この違いは何なのか、またこれをどのように利用すれば改善できるのか?

class Person constructor(var name: String, var age: Int) {
    var profession: String = "test"

    init {
        println("Test")
     }    
}

どのように解決するのですか?

この init ブロックは一次コンストラクタの直後に実行されます。イニシャライザブロックは事実上一次コンストラクタの一部となります。また コンストラクタ は 2 次コンストラクタです。1 次コンストラクタへの委譲は 2 次コンストラクタの最初のステートメントとして行われるため、すべてのイニシャライザブロックのコードは 2 次コンストラクタ本体の前に実行されます。

class Sample(private var s : String) {
    constructor(t: String, u: String) : this(t) {
        this.s += u
    }
    init {
        s += "B"
    }
}

でSampleクラスを初期化したと思ってください。

Sample("T","U")

変数に文字列の応答が得られます。 s として "TBU" . 値 "T" に割り当てられます。 s の一次コンストラクタから サンプル を追加し、initブロックの実行を開始するとすぐに "B" を追加します。initブロックの後、2次コンストラクタ・ブロックが実行され、その変数に s になります。 "TBU" .