こんにちは😀
前回、セカンダリコンストラクタをやりましたが、いまいち理解が浅いのでもう少し深くみてみます。
javaもコンストラクタはありますが、プライマリやセカンダリという使い分けはなかったように思います。
以下は、前回書いた処理を少し変えました。
Keihinクラスの1行目はプライマリコンストラクタになります。
3行目はセカンダリコンストラクタです。
このセカンダリコンストラクタは複数書けます。
class Keihin constructor(val shou:String,val keihin:String){
constructor(shou:String, keihin:String, setting:MutableList<Keihin>)
:this(shou,keihin){
setting.add(this)
}
fun getPresets()=”${shou}賞は、景品:${keihin}です。”
}
このプライマリコンストラクタは、以下のようにconstructorを省略しても書けます。
セカンダリコンストラクタのconstructorは省略できません。
class Keihin(val shou:String,val keihin:String){
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
}
main関数はこう書きます。
第3引数を書けばセカンダリコンストラクタが定義されます。
第2引数までであればプライマリコンストラクタが定義されます。
fun main(args: Array<String>) {
val setting = mutableListOf<Keihin>()
val keihinA = Keihin(“A”,”ハワイ旅行”,setting)
val keihinB = Keihin(“B”,”エアコン”,setting)
val keihinC = Keihin(“C”,”デジカメ”)
println(“〜プライマリコンストラクタ〜”)
println(keihinA.getPresets())
println(keihinB.getPresets())
println(keihinC.getPresets())
println(“〜セカンダリコンストラクタ〜”)
setting.forEach { println(it.getPresets()) }
}
実行しましょう。
イメージとしては、セカンダリコンストラクタはプライマリコンストラクタの引数を拡張させた形でしょうか。
まとめると、
■プライマリコンストラクタ
・「()」の付いたクラス名はプライマリコンストラクタになる。
(上記であれば、「class Keihin{・・・・・}」と書けば普通のクラスになります。)
■セカンダリコンストラクタ
・クラス名なしで「constructor」を付ければセカンダリコンストラクタになる。
・複数指定できる。
・this指定でプライマリコンストラクタを呼び出せる。
Kotlinのコンストラクタに関しては、もっと複雑な理解と使い方ができそうです。
今回はここまで🤚
では、また次回。
コメント