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),并且这种行为对于 属性 来说相当混乱。
考虑到这一点:
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),并且这种行为对于 属性 来说相当混乱。