【问题标题】:Kotlin annotate receiver of extension functionKotlin 对扩展函数的接收者进行注解
【发布时间】:2018-07-03 14:02:11
【问题描述】:

我想限制可以调用哪些常量值扩展函数。例如函数如下:

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

如果这是在真实身份上调用的,那很好:

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

但这应该会导致编译错误:

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

Kotlin 支持注释扩展接收器吗?

【问题讨论】:

    标签: android kotlin annotations kotlin-extension


    【解决方案1】:

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

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

    但是,请注意,Kotlin 编译器不知道 Android 注解的语义,因此它们的错误使用绝不是编译错误;充其量只是一次失败的 lint 检查。

    【讨论】:

    • 当使用R.color.colorPrimary.find() 时,这不会突出显示调用
    • lint 检查很可能不处理接收器上的注释。您可以在 Android 问题跟踪器中提交问题。
    猜你喜欢
    • 2020-03-03
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多