我希望将Kotlin数据类用作异常,这似乎是可行的:
data class MyException(val extraData: Any) : RuntimeException()
我希望在某些情况下能够将一个“cause”传递给超类。不幸的是,数据类只能在其主构造函数中使用“val”/“var”,并且由于默认构造函数调用无参的“RuntimeException()”构造函数,因此似乎我不能这样做而不始终要求传递“cause”,并将其存储为我的类中的字段,这是我不想要的。
我想要的是这样的东西:
data class MyException(val extraData: Any) : RuntimeException() {
constructor(extraData: Any, cause: Throwable) : this(extraData) super(cause) {}
}
看起来即使我不使用数据类,也无法使用方便的var
/val
构造函数助手,因为它们只能在主构造函数中使用,必须选择要使用哪个超级构造函数。我能想到的最好方法是这样,这相当冗长:
class MyException : RuntimeException {
val extraData: Any
constructor(extraData: Any) {
this.extraData = extraData
}
constructor(extraData: Any, cause: Throwable) : super(cause) {
this.extraData = extraData
}
}
我有所遗漏吗?是否真的没有一种方法可以基于重载构造函数有条件地调用不同的父类构造函数,并仍然能够使用
var
/ val 参数语法?如果是这样,为什么?是否有更好的方法来完成这种操作?
Exception
情况都非常好,因为Exception
允许空原因并正确处理它。不能调用不同的超级构造函数并且使用var
/val
参数的更一般性问题仍未得到解答。 - Yona Appletree