如何做一个泛型类T的“新”扩展AbstractClass(JAVA)

时间:2013-04-30 19:54:02

标签: java class generics instance

我正在尝试实例化一个名为“T”的泛型类,扩展“AbstractLauncher”,我不明白我在google上看到的所有主题。你可以帮帮我吗 ? 我有几个名为 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”论点做些什么?

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分: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() ;
    }

}

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

中抛出异常