Wie erweitere ich in Kotlin eine Klasse mit mehreren Konstruktoren?

Ich bin in der Bearbeitung der Lern-Kotlin, und lief in ein problem, konnte ich nicht herausfinden.
Ich möchte erweitern die Java-Klasse RuntimeException in Kotlin, und in der Lage sein, verwenden Sie eine von drei der Konstrukteurswertung, in verschiedenen Situationen (basierend auf welche Informationen habe ich zu der Zeit will ich eine Ausnahme werfen). In meine java-Klasse würde wie folgt Aussehen:

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);
    }
}

Wenn ich versuche, dies zu tun in Kotlin, ich habe diese Antwort als Leitfaden: Kotlin sekundären Konstruktor allerdings hatte ich ein problem, herauszufinden, wie aufrufen, die entsprechenden super-Konstruktor korrekt. Zum Beispiel, die Verwendung von Funktionen zu sein schien ein guter Ansatz, wie diese:

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) {
}

Jedoch in dieser Kotlin Beispiel oben, ich bin immer Aufruf des super-Konstruktors zwei Argumente, und nicht das aufrufen des Konstruktors am besten geeignete für die situation. So was habe ich ja oben arbeitet, aber nicht genau das tun, was Sie tun würde, in Java, in denen ein anderes Konstruktor wird aufgerufen, in jeder situation.
Ich habe auch versucht das instanziieren einer neuen RuntimeException in jedem Spaß oben, und Gießen es zu PhotoLibException, aber ich war nicht erlaubt, das zu tun.

Kann jemand empfehlen, wie ich dies richtig in Kotlin?

InformationsquelleAutor der Frage Steve Moseley | 2014-12-30

Schreibe einen Kommentar