【发布时间】:2019-08-31 05:44:33
【问题描述】:
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:
根据 Kotlin,e.printStackTrace() 是 Unit 类型,我看到一个错误,上面写着 A 'return' expression required in a function with a block body.({...})。
我怎样才能做到这一点?
编辑:我在这里使用stripe-java..
【问题讨论】:
-
该方法必须返回
Subscription,但您只能在try内执行此操作。如果抛出异常,那么应该返回什么方法?看起来它试图返回printStackTrace的结果,即Unit而不是Subscription。至少有两种解决方案:(1)让异常冒泡而不是捕获它,或者(2)使返回类型可以为空,并在抛出异常时返回空。或者使返回类型成为某种可选的,并在抛出异常时返回一个空值。 -
我想过让它可以为空,但是如果我让返回类型可以为空,当它实际抛出错误时,它不会抛出 NullPointerException 吗?另外,
let the exception bubble up到底是什么意思? -
是否可以接受返回 null 完全取决于调用此方法的代码对返回值的作用。 Kotlin 有很多方法可以防止空值。至于让异常冒泡,@Slaw 的意思是根本不捕获异常。这样,无论调用此函数的什么都可以处理它。或任何调用 that 函数。异常将通过调用堆栈“冒泡”,直到遇到 try/catch 块。
-
我想我会选择 Bubbling。谢谢@Slaw 和@Jordan!
标签: java kotlin return try-catch stripe-payments