我在学习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 secondary constructor但是,我在尝试弄清楚如何正确调用适当的超级构造函数时遇到了问题 . 例如,使用函数似乎是一个很好的方法,如下所示:
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示例中,我总是使用两个args调用超级构造函数,而不是调用最适合该情况的构造函数 . 所以我上面的工作,但不完全是在Java中做的事情,在每种情况下调用不同的构造函数 . 我还尝试在上面的每个乐趣中实例化一个新的RuntimeException,并将其转换为PhotoLibException,但我不允许这样做 .
任何人都可以建议我如何在Kotlin中正确地做到这一点?
1 回答
Update :自M11(0.11 . *)以来,您可以使用secondary constructors来解决此问题:
目前,没有办法在同一个类的不同上下文中调用不同的超级构造函数 . 不过,它将在未来几个月内得到支持 .