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的評論中更好地解釋了這一點,在我發布之前它沒有向我顯示:/
添加回答
舉報