我有一個基類,我正在擴展,但想膨脹一個正常的構造函數爲Java
的視圖。Kotlin初始化一個對象
class TextView(context: Context?) : ViewAbstractClass(context)
我不知道如何在Kotlin
中做到這一點。 Kotlin
有什麼構造可以讓你對對象進行復雜的初始化?
我有一個基類,我正在擴展,但想膨脹一個正常的構造函數爲Java
的視圖。Kotlin初始化一個對象
class TextView(context: Context?) : ViewAbstractClass(context)
我不知道如何在Kotlin
中做到這一點。 Kotlin
有什麼構造可以讓你對對象進行復雜的初始化?
有幾種方法可以完成,但這是我一直在我的應用程序中做的。
class TextView : ViewAbstractClass {
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) {
// custom init code for this constructor.
}
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
init {
// Common init code
}
}
注意,你實際上並不在類簽名使用()
,而是明確提供的所有構造函數。
您可以瞭解更多關於此次級構造函數: https://kotlinlang.org/docs/reference/classes.html
https://kotlinlang.org/docs/reference/classes.html#constructors
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
這是一個非常特殊的一段代碼科特林。不知道它是如何回答Q – voddan
有沒有辦法在初始化的不同階段調用'super'?像'init'機制一樣......我們可以在初始化期間的某個階段調用其中一個其他構造函數嗎?或者在default構造函數完成後調用init? – fergdev
我剛剛意識到他實際上在問什麼。廢話。是的,正如上面所說的'voddan',你正在尋找'init'。 'init'總是在父進程'init'之後調用,並且你不需要調用super(實際上,你不能)。 – bclymer