Я занимаюсь обработкой обучения Котлин и столкнулся с проблемой, которую я не мог понять. Я хотел бы расширить класс RuntimeException Java в Kotlin и иметь возможность использовать любой из трех его конструкторов в разных обстоятельствах (на основе того, какую информацию у меня есть в то время, когда я хочу выбросить исключение). В java мой класс будет выглядеть так:
public class PhotoLibException extends RuntimeException {
public PhotoLibException(String message, RuntimeException ex) {
super(message, ex);
}
public PhotoLibException(String message) {
super(message);
}
public PhotoLibException(RuntimeException ex) {
super(ex);
}
}
Когда я пытаюсь сделать это в Котлине, я использовал этот ответ в качестве руководства: вторичный конструктор Kotlin, однако у меня была проблема с попыткой выяснить, как вызвать соответствующий суперструктор правильно. Например, использование функций, казалось, было хорошим подходом, например:
fun PhotoLibException(message: String): PhotoLibException {
val ex = null
return PhotoLibException(message, ex)
}
fun PhotoLibException(ex: Exception): PhotoLibException {
val message = ""
return PhotoLibException(message, ex)
}
class PhotoLibException(message: String, ex: Exception?): RuntimeException(message, ex) {
}
Однако в этом выше примере Kotlin я всегда вызываю суперструктор с двумя аргументами и не ссылаюсь на конструктор, наиболее подходящий для ситуации. Итак, то, что у меня выше, работает, но не делает точно, что он будет делать на Java, где в каждой ситуации вызывается другой конструктор. Я также попытался создать экземпляр нового RuntimeException внутри каждой забавы выше и отбросить его в PhotoLibException, но мне не было позволено это делать.
Кто-нибудь может предложить, как я буду делать это правильно в Котлин?