我工作的一個Java項目,這個項目我做了我第一次嘗試科特林內。我開始使用Intellij Idea中提供的JavaToKoltin轉換器將一些類轉換爲Kotlin。其中我的自定義例外現在轉換爲Kotlin。但是由於這種情況,異常處理不再正確工作。
如果我在java代碼中拋出一個自定義異常(例如MyCustomKotlinException.kt
),則不會捕獲異常(請參閱下面的代碼)。搖籃項目:java.lang.NoClassDefFoundError:科特林/ JVM /內部/內部函數
// Example.java
package foo
import java.util.*;
import java.lang.*;
import java.io.*;
import foo.MyCustomKotlinException;
class Example
{
public static void main (String[] args)
{
try {
// Do some stuff
// if Error
MyCustomKotlinException e = new MyCustomKotlinException("Error Message");
throw e;
} catch (MyCustomKotlinException e) { // <-- THIS PART IS NEVER REACHED
// Handle Exception
} catch (Throwable e) {
e.printStackTrace(); <-- This is catched
} finally {
// Finally ...
}
}
}
所以任何人都可以向我解釋爲什麼這個異常不被捕獲。 MyCustomKotlinException
繼承自Kotlins RuntimeException
,這只是java.lang.RuntimeException
的別名。
// MyCustomKotlinException.kt
package foo
class MyCustomKotlinException(err: String) : RuntimeException(err)
更新:
我扔部分分成2線(例如創建和投擲),發現問題不是投擲。 try塊在實例創建後留下。我的這個Kotlin類的實例創建有什麼問題嗎?
UPDATE2:
我添加了一個第二catch塊與Throwable
和下面的Throwable被捕獲。
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
...
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
UPDATE3:
改變了標題糾正錯誤和固定的問題,將所有項目文件的jar(見下面的回答)。 將Kotlin運行庫lib添加到gradle對我來說不起作用。
請提供一個完整的[mcve],例如kotlin源代碼。 – GhostCat
@GhostCat對你來說就夠了嗎? – FreshD
它必須足夠讓人們可以重現問題。看起來像現在。 – GhostCat