亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

科特林的嘗試捕捉塊 - 返回什么

科特林的嘗試捕捉塊 - 返回什么

BIG陽 2022-09-28 15:55:35
fun cancelSubscription(cancelStripeSubscription: CancelStripeSubscription): Subscription {        Stripe.apiKey = testApiKey        try {            val sub = Subscription.retrieve("superSecret")            return sub.cancel(null)        } catch (e: StripeException) {            e.printStackTrace()        }    }Background:科特林新手在這里試圖將條紋計費集成到科特林應用程序中。Problem:根據 Kotlin 的類型,我看到一個錯誤,說 .e.printStackTrace()UnitA 'return' expression required in a function with a block body.({...})我怎樣才能做到這一點?編輯:我在這里使用。stripe-java
查看完整描述

2 回答

?
GCT1015

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 編程語言。


查看完整回答
反對 回復 2022-09-28
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

您的函數必須返回訂閱或 null,否則存在異常,不這樣做,因此它無效cancelSubscription

在Slaw的評論中更好地解釋了這一點,在我發布之前它沒有向我顯示:/


查看完整回答
反對 回復 2022-09-28
  • 2 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號