首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何声明一个可抛出的函数类型?

如何声明一个可抛出的函数类型?
EN

Stack Overflow用户
提问于 2020-06-18 16:44:54
回答 1查看 155关注 0票数 0

我知道在kotlin-multiplatform中,你可以用@Throws注释一个函数,使它成为一个可抛出的函数。因此,转换后的Java/Swift代码具有函数签名的throws修饰符。

但是,当我有一个函数的参数也是一个函数时,我如何标记这个函数是可抛出的?

例如:

代码语言:javascript
复制
fun foo(run : () -> Unit) {}

上面的函数有一个参数"run",它接受一个闭包/函数。但是这个参数在编译时没有"throws“修饰符,所以在Java/Swift中,我不能在传递给这个函数的闭包中抛出任何东西。

我尝试将@Throws注释添加到函数中。将其放在函数声明之外会导致foo()函数标记为"throws“。将其放在参数括号中,无论是在冒号之前还是之后,都会导致一个错误,说明注释不适用于目标“值参数”/“类型用法”。

总而言之,我正在寻找的东西类似于:

代码语言:javascript
复制
fun foo(@Throws(Throwable::class) run : () -> Unit)

or 

fun foo(run : @Throws(Throwable::class) () -> Unit)

任何关于这个问题的提示/帮助都是非常非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62445931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档