2

重複の可能性:
scala でオーバーロードされたコンストラクターを使用して独自の例外を定義する

Java Exception クラスをサブクラス化し、同様のコンストラクター (それぞれが対応する Exception ctor を呼び出す) を提供する Scala 例外クラスを作成したいと考えています。つまり、この 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 に答える