Kotlin注释扩展功能的接收者

时间:2018-07-03 14:02:11

标签: android kotlin annotations kotlin-extension

我想限制可以调用哪个常量值扩展功能。例如如下功能:

@IdRes
fun <T : View> Int.find() = findViewById<T>(this)

如果这是通过真实ID调用的,那很好:

R.id.someView.find<TextView>() // ok

但这会导致编译错误:

42.find<TextView>() // should be compile error

Kotlin是否支持注释扩展接收器?

1 个答案:

答案 0 :(得分:1)

the documentation中所述,您可以使用以下语法:

fun @receiver:IdRes <T : View> Int.find() = ...

但是,请注意,Kotlin编译器不了解Android批注的语义,因此对它们的不正确使用绝不会导致编译错误。充其量是失败的皮棉检查。