結論
Kotlinでは下記のように、constructor()
キーワードを使うことで、セカンダリーコンストラクターとして、引数に応じてClass
を初期化することができるようです。Swift
では、init()
で初期化方法を分けることができましたよね👀
override var instagram: String? = null, override var twitter: String? = null, override var facebook: String? = null, override var youtube: String? = null, override var github: String? = null, override var web: String? = null, override var isGuide: Boolean, override var name: String, override var fideeId: String, override var description: String, override var imagePath: String ): FirebaseUserDataInterface { constructor(user: FirebaseUserCreateParameter) : this( user.instagram, user.twitter, user.facebook, user.youtube, user.github, user.web, user.isGuide, user.name, user.fideeId, user.description, user.imagePath ) }
ちなみに、プライマリーコンストラクターに初期化コードを含めることはできないらしいので、初期化時にコードを実行したい場合はinit
キーワードを使用します。また、クラスないの初期化コードは、記述した順に実行されるらしいです✍️
class InitOrderDemo(name: String) { val firstProperty = "First property: $name".also(::println) init { println("First initializer block that prints ${name}") } val secondProperty = "Second property: ${name.length}".also(::println) init { println("Second initializer block that prints ${name.length}") } } // First property: hello // First initializer block that prints hello // Second property: 5 // Second initializer block that prints 5
また、セカンダリーコンストラクターによってクラスが初期化された場合も、初期化ブロックは呼び出され、その場合、記述順に限らずセカンダリーコンストラクターブロックよりも先にinit { }
ブロックが呼び出されます。
class Constructors { init { println("Init block") } constructor(i: Int) { println("Constructor $i") } } // Init block // Constructor 1
てな感じで本日も以上となります🍺