【问题标题】:How to annotate lambda's return value如何注释 lambda 的返回值
【发布时间】:2022-01-12 04:42:52
【问题描述】:

我有一个带有 lambda 参数的函数:

private fun MyFun(
    progress: () -> Float,
) {
    // ...
}

我想用@FloatRange(from = 0.0, to = 1.0) 注释progress lambda 的返回值,但不知道该怎么做。我解决这个问题的所有尝试都会导致语法错误。我哪里错了?

【问题讨论】:

    标签: kotlin lambda annotations


    【解决方案1】:

    您可以定义一个函数式接口来描述您的类型,并在那里对其进行注释:

    fun interface ProgressCallback {
        @FloatRange(from = 0.0, to = 1.0) fun progress(): Float
    }
    
    private fun myFun(progress: ProgressCallback) {
        // ...
    }
    
    fun foo() {
        myFun { 5.0f } // error, doesn't conform to FloatRange
    }
    

    仅供参考,如果您传递函数引用而不是 lambda,或者如果您间接调用返回 Float 的函数,则 lint 不够复杂,无法检测到是否满足要求:

    fun bar() = 5.0f
    
    fun foo() {
        myFun(::bar) // no error
        myFun { bar() } // no error
    }
    

    或者,如果您返回单个文字值以外的任何内容:

    fun foo() {
        myFun { 1.0f * 2.0f } // no error
    }
    

    【讨论】:

      【解决方案2】:

      在 kotlin 语言中,lambda 用于执行任务,而不是注释。你可以像这样评论代码 // FloatRange(from = 0.0, to = 1.0)

      示例:

      // FloatRange(from = 0.0, to = 1.0)

      私人乐趣MyFun(

      进度:() -> 浮点数,

      ) {

      }

      您可以阅读 here 以更好地理解 kotlin 语言中的 lambda

      【讨论】:

        猜你喜欢
        • 2018-12-15
        • 2017-03-04
        • 1970-01-01
        • 2020-08-24
        • 2018-11-18
        • 2023-04-02
        • 1970-01-01
        相关资源
        最近更新 更多