4

特定のクラス (ClassA と呼びます) を拡張する必要があるクラス (ClassB と呼びます) を作成する必要があると言われている課題に取り組んでいます。唯一の問題は、ClassA のコンストラクター内のコードが例外をスローする可能性があることです。そのため、ClassB のコンストラクターを作成するときに、super() への呼び出しの周りに try/catch ブロックをラップしようとしていますが、もちろん、 super が最初の呼び出しである必要があるため、機能しません。

どうすればこれを回避できますか?

4

3 に答える 3

6
public ClassB extends ClassA {
    public ClassB() throws MyClassAException {
        super();
    }
}
于 2012-11-20T20:54:57.850 に答える
1

サブクラス コンストラクターの throws 句に例外を追加できます。

class ClassA {
    ClassA() throws Exception {

    }
}
public class Demo extends ClassA {
    Demo() throws Exception {
        super();
    }

    public static void main(String[] args) {
        try {
            Demo d = new Demo();   // Handle exception here.
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
于 2012-11-20T20:55:47.833 に答える
0

ClassB静的メソッドが必要です

public static ClassB makeClassB() {
    try {
        return new ClassB();
    }
    catch(Exception exc) {
        // whatever logic you are currently performing to swallow
        // presumably you have some default ClassB to return as part of this logic?
    }

の構築をClassBtry/catch でラップします。クライアントコードが呼び出さmakeClassB()れ、コンストラクターがClassBスローさprivateれます。

于 2012-11-20T21:03:44.677 に答える