[英]Try-catch block in Kotlin — what to return
fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription {
Stripe.apiKey = testApiKey
try {
val sub = Subscription.retrieve("superSecret")
return sub.cancel(null)
} catch (e: StripeException) {
e.printStackTrace()
}
}
Background
:
Kotlin新手在这里尝试将Stripe Billing集成到Kotlin应用程序中。
Problem
:
由于e.printStackTrace()
根据Kotlin是Unit
类型的,所以我看到一个错误,指出A 'return' expression required in a function with a block body.({...})
。
我该如何进行这项工作?
编辑 :我在这里使用stripe-java
。
您有一个返回类型为Subscription
的函数。 这意味着函数中所有可能的代码路径必须最终返回Subscription
或引发异常。 如您目前所拥有的,您的代码仅在try
块中返回。 这是个问题; 如果有异常抛出它移动到catch
它没有return语句块,也不存在后任何return语句catch
块。 这意味着有一条代码路径不会返回任何内容,因此会导致错误。
对此错误至少有两种解决方案:
不要抓住例外; 只需让它冒出该方法给调用者即可。
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将强制您处理该问题。 有关更多信息,请参见Null Safety-Kotlin编程语言 。
您的功能cancelSubscription
必须返回一个订阅或为null,否则会发生异常,因此无效
在Slaw的评论中有更好的解释,在我发布之前它并没有显示给我:/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.