在Kotlin中,如何扩展具有多个构造函数的类?

我正在学习Kotlin的过程中,遇到了一个我无法想象的问题。 我想在Kotlin中扩展Java类的RuntimeException,并且能够在不同情况下使用它的三个构造函数中的任何一个(根据我当时想要抛出异常的信息)。 在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中这样做时,我使用了这个答案作为指导:但是, 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,但是我没有被允许这样做。

任何人都可以建议我怎么会在Kotlin正确做到这一点?

更新 :由于M11(0.11。*),你可以使用二级构造函数来解决这个问题:

 class PhotoLibException : RuntimeException { constructor(message: String, ex: Exception?): super(message, ex) {} constructor(message: String): super(message) {} constructor(ex: Exception): super(ex) {} } 

目前,没有办法在同一个班级的不同背景下调用不同的超级构造函数。 尽管如此,它将在未来几个月得到支持。