0

我有一些类,只有在传递的参数为真时才想初始化。事实证明,这个方法的每个实现都是相同的,只是用于不同的类。

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 回答