首页 文章

Kotlin Extensions属性与功能 - 冲突

提问于
浏览
0

我有以下两个定义 .

第一个作为扩展函数,允许设置可见的 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

    用这个:

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

相关问题