Kotlinのコンストラクタまとめ


備忘録も兼ねて、Kotlinでコンストラクタを書く方法をまとめました。

Java


簡単な導入のために、Javaでのコンストラクタ例を記します。

class Book {
  private String title;  //タイトル
  private int page_num;  //ページ数 

  //引数なしコンストラクタ
  public Book() {}

  //引数ありコンストラクタ
  public Book(String title, int page_num) {
      this.title = title;
      this.page_num = page_num;
  }
}

よく分かりませんがBookクラスがあり、titleとpage_numをメンバ変数にもちます。
コンストラクタ内で初期化しています。


プライマリコンストラクタ



上記で行ったことをKotlinで書く場合、以下のようになります。クラス定義と同時に、クラス名に続けて書くのが基本。このようなコンストラクタをプライマリコンストラクタと呼ぶそうです。

class Book constructor(title: String, page_num: Int){
  val title: String
  val page_num: Int

  init {
      this.title = title
      this.page_num = page_num
  }
}

 constructorキーワードは、この場合省略することができます。

class Book (title: String, page_num: Int){
  val title: String
  val page_num: Int

  init {
      this.title = title
      this.page_num = page_num
  }
}

initキーワードは、初期化ブロックのためのもので、ここにコードを書くことができます。ここでは、Javaのコンストラクタ内で行った初期化を初期化ブロック内で行っています。

ここでやっていることは、メンバ変数の「宣言」と「初期化」です。この2つをまとめて行うこともできます。具体的には、以下のようにします。

class Book (val title: String, val page_num: Int){}


セカンダリコンストラクタ


2つ目以降のコンストラクタはセカンダリコンストラクタと呼び、以下のように書きます。こちらはconstructorキーワードを省略できません。

class Book (val title: String, val page_num: Int){

  constructor(title: String, page_num: Int, author: String){}
}


thisを用いて別のコンストラクタを呼び出せます。

class Book (val title: String, val page_num: Int){

  constructor(title: String, page_num: Int, author: String):this(title, page_num){}
}

コメント

タイトルとURLをコピーしました