我有一个基类,我正在扩展,但想膨胀一个正常的构造函数为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