【问题标题】: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