0

渡されたパラメーターが true の場合にのみ初期化したいクラスがいくつかあります。このメソッドのすべての実装は同じですが、異なるクラスに使用されているだけです。

public static NamedScene getScene(boolean init) {
    if (mainMenu == null) {
        mainMenu = new MainMenu();
    }
    if (init) mainMenu.init();
    return mainMenu;
}

このメソッドを抽象化したいので、呼び出しによって手動でアクセスする必要はありませんがMainMenu.init(true);scene.init(true);シーンが抽象クラスを拡張する場所を使用します。

抽象メソッド getName() を介してアクセスされる名前など、すべてのクラスにいくつかのデフォルト プロパティがあります。メソッドが init() なしでクラス インスタンスを返す場合もあれば、init() を使用する場合もあると思います。

4

1 に答える 1

0

これには一般的な方法を使用することを検討してください。
それはあなたが望んでいた正確なコードではありませんが、それから理解できます:

  public static <T> T conditionalInit(Class<T> clazz, boolean okToInit) {
    try {
      return okToInit?clazz.newInstance() : null;
    } catch (Exception e) {
      return null;
    }
 }

使用法:

Person p = conditionalInit(Person.class, true); //not null
Person p2 = conditionalInit(Person.class, false); //null

コメント:
1. 「init」メソッドを実行する必要がある場合は、すべてのクラスで「init」メソッドを含む Initializable インターフェイスを実装することをお勧めします。
そして、メソッドのシグネチャは次のようになります:
public static T conditionalInit(Class clazz, boolean okToInit)


2. 非ジェネリック クラスに静的ジェネリック メソッドが存在する可能性があることを思い出してください。

于 2012-11-08T20:06:28.927 に答える