【发布时间】:2017-07-14 19:16:52
【问题描述】:
我想使用一个 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 参数语法吗?如果是这样,为什么?有没有更好的方法来做这种事情?
【问题讨论】: