gpt4 book ai didi

scala - 在 Scala 中正确扩展 Java 异常的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 21:17:58 25 4
gpt4 key购买 nike

我试图找到最简单但正确的方法来扩展 Java Exception在斯卡拉。例如,以下不正确,因为 new Exception(null, cause)new Exception(cause)根据 Throwable.java 有不同的行为:

class InvalidVersionException(message: String = null, cause: Throwable = null)
extends IllegalArgumentException(message, cause) {
def this(message: String) = this(message, null)
// This is not same with super(cause)
def this(cause: Throwable) = this(null, cause)
}

因为我知道 Throwable(cause)将消息设置为 cause.toString() ,我想出了以下几点:
class InvalidVersionException(message: String = null, cause: Throwable = null)
extends IllegalArgumentException(if ((message eq null) && (cause ne null)) cause.toString else message, cause) {
def this(message: String) = this(message, null)
def this(cause: Throwable) = this(null, cause)
}

但是,这仍然有:
if ((message eq null) && (cause ne null)) cause.toString

这是从 Throwable.java 复制的.

有没有更好的方法来扩展 Exception没有任何代码重复?

最佳答案

在我看来,您应该能够将仅原因构造函数更改为:

def this(cause: Throwable) = this(cause.toString, cause)

编辑:要处理空原因:
def this(cause: Throwable) = this(if (cause == null) "(no message)" else cause.toString, cause)

将“(无消息)”替换为 null(不推荐)或您认为合适的任何文本。

关于scala - 在 Scala 中正确扩展 Java 异常的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com