Kotlin有没有办法隐藏(放置在其他地方)视图的默认构造函数?也许创建一个子视图或扩展或类似的东西。
目前我的所有观点都是这样的,这有点冗长:
class MyView(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int): View(context, attrs, defStyleAttr, defStyleRes) {
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int): this(context, attrs, defStyleAttr, 0)
constructor(context: Context, attrs: AttributeSet?): this(context, attrs, 0, 0)
constructor(context: Context): this(context, null, 0)
}
答案 0 :(得分:6)
您可以使用default arguments:
class MyView(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0): View(context, attrs, defStyleAttr, defStyleRes)
如果您需要从Java调用这些构造函数,请考虑applying构造函数的@JvmOverloads
注释:
class MyView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0): View(context, attrs, defStyleAttr, defStyleRes)
答案 1 :(得分:1)
@ udalov的回答或多或少的正确格式:
class MyView(context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
defStyleRes: Int = 0) : View(context, attrs, defStyleAttr, defStyleRes)
或
class MyView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
defStyleRes: Int = 0
) : View(context, attrs, defStyleAttr, defStyleRes) {
// ....
}