87

Kotlinの学習を開始しました。initブロックとブロックの違いを教えてconstructorください。これと、これを使用して改善する方法の違いは何ですか?

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

    init {
        println("Test")
     }    
}
4

4 に答える 4

18

Kotlin クラスのクラスは、コードを含まないプライマリ コンストラクター (クラス名の後のコンストラクター) であり、プロパティを初期化することしかできません (例: class X(var prop: String))。

プロパティが初期化された後に実行されるコードを追加できる場所のinit{..}ブロック:

初期化ブロックは、クラス本体に表示されるのと同じ順序で実行され、プロパティ初期化子とインターリーブされます

それについての詳細は https://kotlinlang.org/docs/reference/classes.html#constructorsにあります

次に例を示します。



class X(var b: String) {
  val a = print("a")

  init {
    print("b")
  }

  constructor() : this("aaa") {
    print("c")
  }
}


X()

呼び出されると、 が出力されabcます。したがって、プライマリ コンストラクターの、セカンダリ コンストラクターの前init{..}に呼び出されます。

于 2019-03-26T12:16:48.190 に答える