1

我正在尝试实例化一个名为“T”的泛型类,扩展“AbstractLauncher”,但我不明白我在谷歌上看到的所有主题。你可以帮帮我吗 ?我有几个名为ConcretXLauncher的类,而我的 MainClass 上没有“ConcretXLauncher”,但只有可以扩展 AbstractLauncher 的泛型......

public MainClass < T extends AbstractLauncher > {

    public MainClass(Config config){
      //T launcher = new T(config); doesnt work, I want to do new ConcretXLauncher(config)     

      T launcher = newInstance(????); 
      // code using "launcher" 
    }

    public static < T > T newInstance(Class clazz) {
        return clazz.newInstance() ;
    }

}

在其他主题中,我看到了这个函数,但我不知道如何调用它?我必须为“clazz”论点添加什么?

4

2 回答 2

0

这是一个如何定义newInstance方法并调用它的示例:

public class Test {
  public static <T> T newInstance(Class<T> clazz) throws InstantiationException, IllegalAccessException {
    return clazz.newInstance();
  }

  static class A {

    @Override
    public String toString() {
      return "hello";
    }
  }

  public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    A a = newInstance(A.class);
    System.out.println(a);
  }
}
于 2013-04-30T20:51:51.330 回答
0

你可以使用以下

public class MainClass < T extends AbstractLauncher> {

    public MainClass(Config config, Class<T> clazz) throws Exception {


      T launcher = newInstance(clazz); 
      // code using "launcher" 
    }

    public static <T> T newInstance(Class<T> clazz) throws Exception {
        return clazz.newInstance() ;
    }

}

您可以引入自定义运行时异常,而不是从构造函数中抛出 Exception

于 2013-05-01T06:13:04.267 回答