8

パラメータを使用して構築する必要のある基本クラスがあります。子クラスでは、基本クラスを作成する前にこのパラメーターを準備する必要がありますが、Javaでは、何よりも先にsuperを呼び出す必要があります。この状況を処理するための最良の方法は何ですか(以下の簡単な例を参照)。

class BaseClass {
    protected String preparedParam;

    public BaseClass(String preparedParam) {
        this.param = param;
    }
}

class ChildClass {

    public ChildClass (Map<String, Object> params) {
        // need to work with params and prepare param for super constructor
        super(param);
    }
}
4

4 に答える 4

12

変換を実行してそれを呼び出す静的メソッドを作成できます。

class ChildClass {

    static String preprocessParams(Map<String, Object> params) {
        ...
        return someString;
    }

    public BaseClass(Map<String, Object> params) {
        super(preprocessParams(params));
    }
}
于 2011-03-22T09:42:58.937 に答える
5

これが1つのアプローチです:

class ChildClass {
    public ChildClass(Map<String, Object> params) {
        super(process(params));
    }

    private static String process(Map<String, Object> params) {
         // work with params here to prepare param for super constructor
    }
}
于 2011-03-22T09:43:06.577 に答える
2

準備/初期化する必要のある多くのパラメータがあるため、私にとっては単純なファクトリメソッドの方が優れたソリューションです。私の見解では、これは少し明確な解決策です。とにかく答えてくれてありがとう。

class BaseClass {
  protected Object preparedParam;

  public BaseClass(Object preparedParam) {
    this.preparedParam = preparedParam;
  }
}

class ChildClass extends BaseClass {

  private ChildClass(Object preparedParam) {
    super(preparedParam);
  }

  public static ChildClass createChildClass(Map<String, Object> params) {
    Object param1 = params.get("param1");

    // prepare params here

    ChildClass result = new ChildClass(param1);

    // do other stuff

    return result;
  }
}
于 2011-03-23T02:23:55.710 に答える
0

私はローマの答えをこれまでのところ最高だと評価します。親クラスがデフォルトのコンストラクターを提供している場合は、superのオブジェクトをインスタンス化してから、setterメソッドを使用できます。

于 2011-03-22T09:55:13.377 に答える