Kotlin 扩展函数

Kotlin Extension Function

考虑到这一点:

MyView.setVisibility(View.VISIBLE)

可以简化为:

inline fun View.setVisible() = apply { visibility = View.VISIBLE }

MyView.setVisible()

如果您愿意,也可以这样做:

inline infix fun View.vis(vis: Int) = apply { visibility = vis }
MyView vis View.VISIBLE

有没有办法通过这样做达到同样的目的:

MyView.VISIBLE

"getter" 修改状态似乎有点奇怪,但您可以使用 extension property:

val View.VISIBLE: Unit
    get() {
        visibility = View.VISIBLE
    }

您还可以使它 return 成为新的可见性值或 return 本身,这样您就可以潜在地进行链式调用。

val View.VISIBLE: Int
    get() {
        visibility = View.VISIBLE
        return visibility
    }

val View.VISIBLE: View
    get() = apply { visibility = View.VISIBLE }

是的,您可以像这样用 getter 写 extension property 属性:

val View.visible: View
    get() = apply { visibility = View.VISIBLE }

随着用法:

 myView.visible

但是,请记住,通常不鼓励 getter 中具有副作用的属性(另请参阅:Functions vs Properties),并且这种行为对于 属性 来说相当混乱。