我知道在kotlin-multiplatform中,你可以用@Throws注释一个函数,使它成为一个可抛出的函数。因此,转换后的Java/Swift代码具有函数签名的throws修饰符。
但是,当我有一个函数的参数也是一个函数时,我如何标记这个函数是可抛出的?
例如:
fun foo(run : () -> Unit) {}上面的函数有一个参数"run",它接受一个闭包/函数。但是这个参数在编译时没有"throws“修饰符,所以在Java/Swift中,我不能在传递给这个函数的闭包中抛出任何东西。
我尝试将@Throws注释添加到函数中。将其放在函数声明之外会导致foo()函数标记为"throws“。将其放在参数括号中,无论是在冒号之前还是之后,都会导致一个错误,说明注释不适用于目标“值参数”/“类型用法”。
总而言之,我正在寻找的东西类似于:
fun foo(@Throws(Throwable::class) run : () -> Unit)
or
fun foo(run : @Throws(Throwable::class) () -> Unit)任何关于这个问题的提示/帮助都是非常非常感谢的!
发布于 2020-06-18 20:39:07
您不能使用@Throws注释函数参数,因为注释具有以下目标: AnnotationTarget.FUNCTION、AnnotationTarget.PROPERTY_GETTER、AnnotationTarget.PROPERTY_SETTER和AnnotationTarget.CONSTRUCTOR。
在Kotlin tracker中创建的功能请求:https://youtrack.jetbrains.com/issue/KT-39688
https://stackoverflow.com/questions/62445931
复制相似问题