2 回答
TA贡献1827条经验 获得超4个赞
您有一个返回类型为 的函数。这意味着函数中所有可能的代码路径最终都必须返回或引发异常。由于您当前拥有它,您的代码仅在块中返回。这是一个问题;如果抛出异常,它将移动到没有返回语句的块中,并且在块之后也没有任何返回语句。这意味着存在导致不返回的代码路径,因此是错误的。SubscriptionSubscriptiontrycatchcatch
此错误至少有两种解决方案:
不要抓住异常;只需让它从方法中冒泡到调用方即可。
fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription =
Subscription.retrieve("superSecret").cancel(null)
使返回类型为 null,并在引发异常时返回 null。
fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription? =
try {
Subscription.retrieve("superSecret").cancel(null)
} catch (ex: StripeException) {
null
}
我想过让它可以为空,但是如果我使返回类型可为空,当它实际抛出错误时,它不会抛出一个 NullPointerException 吗?
函数本身不会抛出 NPE,不。由于返回类型现在是可为空的,因此当您尝试使用结果时,Kotlin 将强制您处理该类型。有关更多信息,请参见空安全 - Kotlin 编程语言。
TA贡献1815条经验 获得超10个赞
您的函数必须返回订阅或 null,否则存在异常,不这样做,因此它无效cancelSubscription
在Slaw的评论中更好地解释了这一点,在我发布之前它没有向我显示:/
添加回答
举报