如何在Kotlin中声明参数传递的函数可抛出异常?
Kotlin函数类型参数的异常声明方法
问题场景
需要为invoke函数中作为参数传递的convertorCall函数声明可抛出异常,初始代码如下:
suspend operator fun <T> invoke( convertorCall: () -> T ): T?
若为类方法声明异常,可直接使用@Throws注解:
@Throws(JsonSyntaxException::class) suspend fun <T> convertorCall(): T
但尝试直接给函数参数添加@Throws注解时,出现语法错误:
该注解不适用于“值参数”目标
解决方案
Kotlin中需直接在函数类型定义内声明异常,而非给参数本身加注解。将函数类型从() -> T修改为() -> T @Throws(JsonSyntaxException::class)即可,完整代码如下:
suspend operator fun <T> invoke( convertorCall: () -> T @Throws(JsonSyntaxException::class) ): T?
说明
- 这种写法明确告知编译器:传入的
convertorCall函数允许抛出JsonSyntaxException - 调用
invoke时,传入的lambda或函数引用若抛出该异常,编译器会正常识别其合法性
内容的提问来源于stack exchange,提问作者Pierre Vieira
相关产品推荐
相关产品推荐

