最佳答案
我在学习 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 尝试这样做时,我使用了这个答案作为指南: 然而,我在试图找出如何正确调用适当的超级构造函数时遇到了一个问题。例如,使用函数似乎是一种很好的方法,如下所示:
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 该怎么做吗?