2

可能重复:
在 scala 中使用重载的构造函数定义自己的异常

我想编写一个 Scala 异常类,它是 Java Exception 类的子类,并提供类似的构造函数(每个构造函数都调用相应的 Exception ctor。即,我将如何编写这个 Java 类的 Scala 等价物:

public class MyException extends java.lang.Exception {
    public MyException () {
    }

    public MyException (String msg) {
        super(msg);
    }

    public MyException (Throwable e) {
        super(e);
    }

    public MyException (String msg, Throwable cause) {
        super(msg, cause);
    }
}

这似乎与这个问题有关,但是其中的答案并不令人满意(因为实际上没有定义子类)。

4

2 回答 2

7

使用默认值(null)怎么样?

class YourException (msg:String=null, cause:Throwable=null)
  extends java.lang.Exception (msg, cause) {}
于 2012-06-13T12:26:14.930 回答
1

这种每个调用超类构造函数的重载构造函数的情况是我所知道的 Scala 无法生成与 Java 等效的字节码的唯一情况。在 Scala 中,必须调用主构造函数。可以定义辅助构造函数,但它们只能调用主构造函数。

我认为 Scala 方式要好得多,但这确实意味着无法定义异常类的精确等价物。这在实践中从来没有给我带来过问题,因为您可以将 null 或其他一些默认值传递给最通用的超类构造函数。

于 2012-06-13T10:26:40.920 回答