Raj*_*Raj 3 java return try-catch kotlin stripe-payments
fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription {
Stripe.apiKey = testApiKey
try {
val sub = Subscription.retrieve("superSecret")
return sub.cancel(null)
} catch (e: StripeException) {
e.printStackTrace()
}
}
Run Code Online (Sandbox Code Playgroud)
Background:
Kotlin 新手在这里尝试将 Stripe Billing 集成到 Kotlin 应用程序中。
Problem:
由于e.printStackTrace()类型为Unit根据科特林,我看到一个错误,指出A 'return' expression required in a function with a block body.({...})。
我怎样才能使这项工作?
编辑:我在stripe-java这里使用..
您有一个返回类型为 的函数Subscription。这意味着函数中所有可能的代码路径最终都必须返回 aSubscription或抛出异常。正如您目前拥有的那样,您的代码仅在try块中返回。这是个问题; 如果抛出异常,它将移动到catch没有 return 语句的catch块中,该块之后也没有任何 return 语句。这意味着存在导致不返回的代码路径——因此是错误。
这个错误至少有两种解决方案:
不要捕捉异常;只是让它从方法中冒出来给调用者。
fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription =
Subscription.retrieve("superSecret").cancel(null)
Run Code Online (Sandbox Code Playgroud)使返回类型可以为 null,如果抛出异常则返回 null。
fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription? =
try {
Subscription.retrieve("superSecret").cancel(null)
} catch (ex: StripeException) {
null
}
Run Code Online (Sandbox Code Playgroud)
我想过让它可以为空,但是如果我让返回类型可以为空,当它实际抛出错误时,它不会抛出 NullPointerException 吗?
函数本身不会抛出 NPE,不。由于现在返回类型可以为空,Kotlin 会强制您在尝试使用结果时处理它。有关更多信息,请参阅空安全 - Kotlin 编程语言。
| 归档时间: |
|
| 查看次数: |
7212 次 |
| 最近记录: |