在Java中,很容易知道你什么時候必須try - catch一段代碼,因為編譯器強迫你這樣做,而且方法宣告中有throws關鍵字,其中有將被拋出的Exceptions。
例如:
void testMethod() throws Exception {
throw new Exception("test")。
但在Kotlin中會有這樣的情況:
fun testMethod() {
throw Exception("test")
}
在Kotlin中,我如何知道一個類所提供的一段代碼需要處理某個Exception?
我無法知道我是否必須處理一個Exception,或者我是否可以用一個IOExcepcion來更具體的處理。
16/09/2021編輯:
經過更多的調查,我發現這個 "問題 "沒有任何解決方案。有一個來自2016年的相關問題面臨同樣的問題。是否有任何簡單的方法來查看Kotlin函式拋出的例外?
而這個答案很好地恢復了可以做的事情:
如果你想知道一個Java方法在被IntelliJ中的Kotlin呼叫時拋出了哪些例外? 拋出的例外,你可以使用F1鍵的快捷方式來拉出
Kotlin函式可以使用"@Throws "注解來宣告它所拋出的例外。 @Throws 注解。注解顯然是可選的,所以你 可能不能指望它總是存在。不幸的是,當你 在一個使用@Throws的方法上使用F1鍵盤快捷鍵時,它并不 顯示宣告要拋出的例外。Java呼叫這些 方法的Java呼叫需要捕獲這些在注釋中宣告的例外。 注解中宣告的例外。
Kotlin javadoc可以使用@throws javadoc注解來進一步 提供可在函式中拋出的定義例外。這些 確實出現在javadoc和F1幫助彈出視窗中。當然,這也是 可選的。
uj5u.com熱心網友回復:
答案是,你不知道Kotlin方法可以拋出什么例外,除了它在檔案中所說的。 Kotlin的設計者們故意不考慮這一特性。
具體而言,他們得出的結論是,強制捕捉例外比它的價值更麻煩。 很多Java 代碼實際上并沒有真正處理它應該處理的檢查例外,而最終花費了大量的模板來丟棄它們或記錄它們并忽略它們。 檢驗性例外在函式式編程中特別難以處理,在那里你必須有專門的lambdas來拋出檢驗性例外。
uj5u.com熱心網友回復:
Kotlin 沒有檢查的例外,因此沒有捕獲或指定要求。因此,沒有必要在函式頭中指定任何檢查的例外。
這也意味著 kotlin 不會強迫您捕捉任何 java 代碼中拋出的檢查例外。您可以自行決定是否要捕捉此類例外,也可以選擇不捕捉。
如果你想與java互操作,那么你可以使用@Throws
@Throws(IOException::class)
fun readFile(name: String): String {...}
//這將被翻譯成。
String readFile(String name) throws IOException {...}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311878.html
標籤:
