Sono nell'elaborazione dell'apprendimento di Kotlin e ho riscontrato un problema che non riuscivo a capire. Vorrei estendere la classe Java RuntimeException in Kotlin, ed essere in grado di utilizzare uno qualsiasi dei tre costruttori, in circostanze diverse (in base a quali informazioni ho nel momento in cui voglio lanciare un'eccezione). In Java mia classe sarebbe simile a questa:In Kotlin, come posso estendere una classe che ha più costruttori?
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);
}
}
Quando provo a fare questo in Kotlin, ho usato questa risposta come guida: Kotlin secondary constructor Tuttavia, ho avuto un problema cercando di capire come richiamare il super appropriata costruttore correttamente. Ad esempio, utilizzando le funzioni sembrava essere un buon approccio, in questo modo:
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) {
}
Tuttavia, in questo esempio Kotlin sopra, io sono sempre invocare il costruttore eccellente con due args, e non invocare il costruttore più appropriato per la situazione. Quindi quello che ho sopra funziona, ma non fa esattamente quello che farebbe in Java, dove viene richiamato un costruttore diverso in ogni situazione. Ho anche provato a creare un'istanza di una nuova RuntimeException all'interno di ogni divertimento di cui sopra e a lanciarlo su PhotoLibException, ma non mi è stato permesso farlo.
Qualcuno può suggerire come farei correttamente in Kotlin?