我正在尝试实例化一个名为“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”论点做些什么?
答案 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() ;
}
}
您可以引入自定义运行时异常,而不是从构造函数
中抛出异常