前回の記事「プライマリコンストラクタとセカンダリコンストラクタ」では、クラスを正しく初期化するためのコンストラクタの実装方法を紹介しました。
インスタンスを生成する時に実施しておきたい処理を、クラス内に定義することができたら便利ですよね?例えば、メンバ変数の初期値チェックなど、複雑なクラスを実装する場合はエラーチェックをしておきたいものです。
Kotlin では、その仕組みが用意されており、「イニシャライザ(initializer)」といいます。
イニシャライザ
Kotlin では、キーワード init の後に波括弧でブロックを形成し、コードを記述できます。
このブロックが、インスタンス生成時に実行されます。
|
1 2 3 4 5 6 7 |
class Person(val name: String, val age: Int = 20) { init { // 条件に反した場合、例外をスローする標準ライブラリ関数 require(age >= 0) } } |
年齢(age)がマイナスになることは有り得ません。
そのため、イニシャライザで正の整数であることを確認しています。
負の数であった場合、例では IlleagalArgumentException がスローされます。
以下が使い方と実行結果です。
|
1 2 3 4 5 6 7 8 9 |
fun main() { val taro = Person("太郎", 35) val ziro = Person("次郎") println("${taro.name}, ${taro.age}") // 太郎, 35 println("${ziro.name}, ${ziro.age}") // 次郎, 20 val hanako = Person("花子", -1) // IllegalArgumentException } |
このように、年齢が負の数であるインスタンスが生成されないように、イニシャライザにメンバ変数のチェックを行うコードを記述することが出来ます。