Kotlin Extensions属性与功能 - 冲突

时间:2018-04-04 15:11:09

标签: android kotlin kotlin-extension

我有以下两个定义。

第一个作为扩展函数,允许设置View可见,并使用第二个参数将其设置为不可见或不可见。

fun View.setVisible(visible: Boolean, goneWhenVisibleFalse: Boolean) {
    visibility = when {
        visible -> View.VISIBLE
        goneWhenVisibleFalse -> View.GONE
        else -> View.INVISIBLE
    }
}

这里的第二个,作为使用上面第一个的扩展属性。

var View.visible: Boolean
    get() = visibility == View.VISIBLE
    set(value) {
        setVisible(value, true)
    }

直到这里才复杂。代码编译并正确启动应用程序。但我得到一个黑屏,logcat没有错误,没有任何迹象。

过了一会儿,我改变第一个函数的签名以接收第二个参数,默认为true:

fun View.setVisible(visible: Boolean, goneWhenVisibleFalse: Boolean = true )

然后它正常工作。问题是:为什么会这样?我挖了字节码。但看起来没有重复签名,两种情况下参数的数量都不同。

也许是kotlin的错误?我使用的是kotlin插件v1.2.30

1 个答案:

答案 0 :(得分:0)

使用此:

View.setVisible(visible: Boolean, goneWhenInvisible: Boolean = false) { 
    visibility = if (visible) View.VISIBLE 
    else if (goneWhenInvisible) View.GONE 
    else View.INVISIBLE
}