Я работаю над проектом Java, и в рамках этого проекта я сделал первую попытку с Kotlin. Я начал конвертировать некоторые классы в Kotlin с конвертером JavaToKoltin, представленным в Intellij Idea. В частности, мои пользовательские исключения теперь превращаются в Котлин. Но с этим обработка исключений больше не работает.
Если я выброшу одно из моих пользовательских исключений (например, MyCustomKotlinException.kt
) в java-код, исключение не будет найдено (см. Код ниже).
// 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)
Update:
Я разбил часть броска на 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 в gradle не работает для меня.