隐藏视图默认构造函数

时间:2016-07-18 15:41:09

标签: android kotlin

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)
}

2 个答案:

答案 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) {
    // ....
}