備忘録も兼ねて、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){}
}
コメント