gpt4 book ai didi

java - Kotlin 中的 Try-catch block ——返回什么

转载 作者:行者123 更新时间:2023-11-29 08:23:17 28 4
gpt4 key购买 nike

fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription {
Stripe.apiKey = testApiKey
try {
val sub = Subscription.retrieve("superSecret")
return sub.cancel(null)
} catch (e: StripeException) {
e.printStackTrace()
}
}

背景:

这里的 Kotlin 新手正在尝试将 Stripe Billing 集成到 Kotlin 应用程序中。

问题:

根据 Kotlin,e.printStackTrace() 属于 Unit 类型,我看到一个错误提示 A 'return' expression required in a function with block 体。({...})

我怎样才能让它工作?

编辑:我在这里使用stripe-java..

最佳答案

您有一个返回类型为订阅 的函数。这意味着函数中所有可能的代码路径最终都必须返回 Subscription 或抛出异常。正如您目前拥有的那样,您的代码仅在 try block 中返回。这是个问题;如果抛出异常,它会移动到没有返回语句的 catch block 中,在 catch block 之后也没有任何返回语句。这意味着存在导致不返回的代码路径——因此出现错误。

这个错误至少有两种解决方法:

  1. 不捕获异常;让它从调用者的方法中冒出来。

    fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription =
    Subscription.retrieve("superSecret").cancel(null)
  2. 使返回类型可为 null,并在抛出异常时返回 null。

    fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription? =
    try {
    Subscription.retrieve("superSecret").cancel(null)
    } catch (ex: StripeException) {
    null
    }

    I thought about making it nullable but if I make the return type nullable, won't it throw a NullPointerException when it actually throws an error?

    函数本身不会抛出 NPE,不会。由于返回类型现在可以为空,因此当您尝试使用结果时,Kotlin 将强制您处理该类型。有关详细信息,请参阅 Null Safety - Kotlin Programming Language .

关于java - Kotlin 中的 Try-catch block ——返回什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601150/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com