Jestem w trakcie uczenia się Kotlina, i wpadłem w problem, którego nie mogłem zrozumieć. Chciałbym przedłużyć klasę Java RuntimeException w Kotlin i móc używać dowolnego z trzech jego konstruktorów, w różnych okolicznościach (na podstawie informacji, które mam w momencie, gdy chcę rzucić wyjątek). W Javie moja klasa będzie wyglądać następująco:W Kotlin, jak mogę rozszerzyć klasę, która ma wiele konstruktorów?
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);
}
}
Kiedy próbuję to zrobić w Kotlin, użyłem tę odpowiedź jako przewodnika: Kotlin secondary constructor jednak miałem problem próbuje dowiedzieć się, jak wywołać odpowiednią Super konstruktor poprawnie. Na przykład za pomocą funkcji wydawał się być dobrym podejściem, tak:
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) {
}
Jednak w tym przykładzie Kotlin powyżej, jestem zawsze powołując super konstruktora z dwoma argumentami, a nie wywoływanie konstruktora najbardziej odpowiednie do sytuacja. Co mam powyżej działa, ale nie robi dokładnie to, co zrobiłby w Javie, gdzie inny konstruktor jest wywoływany w każdej sytuacji. Próbowałem też utworzyć nowy wyjątek RuntimeException w każdej zabawie powyżej i przesłać go do wyjątku PhotoLibException, ale nie mogłem tego zrobić.
Czy ktoś może zasugerować, jak zrobiłbym to poprawnie w Kotlin?