我想限制可以调用的常量值扩展函数。例如,函数如下:
@IdRes
fun <T : View> Int.find() = findViewById<T>(this)
如果这是在真实 id 上调用的,那很好:
R.id.someView.find<TextView>() // ok
但这应该会导致编译错误:
42.find<TextView>() // should be compile error
Kotlin 是否支持注释扩展接收器?
如文档中所述,您可以使用以下语法:
fun @receiver:IdRes <T : View> Int.find() = ...
但是,请注意,Kotlin 编译器不知道 Android 注释的语义,因此它们的错误使用从来都不是编译错误;它充其量只是一个失败的 lint 检查。