2
public Subclass(String[] parameters) throws IllegalArgumentException {
    super("Rectangle",
        Double.parseDouble(parameters[0]),
    Double.parseDouble(parameters[1]),
    90,
    Double.parseDouble(parameters[2]),
    Double.parseDouble(parameters[3]));
            if(parameters.length != 4) throw new IllegalArgumentException("bla, bla");
    if(parameters == null) throw new IllegalArgumentException("bla, bla");
}

スーパーコンストラクターを呼び出す前に、これら 2 つの if ステートメントを配置したいと思います。私はそれができないことを知っているので、Exception呼び出す前にそのようなパラメーターの解析 (を投げる)を行う簡単な方法は何super()ですか?

4

2 に答える 2

8

String[]それを取得して返す検証メソッドを宣言します。

private static String[] validate(String[] param) {
    // do validation here
    return param;
}

そして、param初めて使用するときに呼び出します

super("Rectangle", Double.parseDouble(validate(param).parameters[0]),

このトリックは問題をすばやく解決しますが、別の投稿者が指摘したように、API をリファクタリングした方がよい場合もあります (ファクトリ メソッドの作成など)。

于 2010-08-13T23:17:09.220 に答える
5

ファクトリ パターン (抽象ファクトリなど) を作成して、新しいインスタンスを取得するファクトリ オブジェクトを作成できます。新しいインスタンスを取得するためのファクトリ クラス メソッドは、実際のサブクラスの (プライベート) コンストラクターを呼び出す前に、不正な引数の例外をスローする可能性があります。

新しいインスタンスを作成して返す前に、 Builder パターンを使用してパラメーターを確認することもできます。ビルダー オブジェクト (多くの場合、外部クラスのプライベート コンストラクターなどにアクセスできる内部クラス) を作成し、そのプロパティを設定してbuild()メソッドを呼び出します。そのメソッドは、新しいインスタンスを返す前に必要な検証を行うことができます。

于 2010-08-13T23:16:29.297 に答える