您的主要问题不是您正在使用抽象类 – 在这种情况下,注释中发布的建议将非常有用.更大的问题是你试图直接实例化一个泛型类型(读取:new T()) – 简单地说,由于
type erasure,你不能用Java做.
也就是说,总有一种解决方法:
/**@param clazz the subclass you want to instantiate */
public foo(Class clazz) {
ArrayList arr = new ArrayList();
arr.add(clazz.newInstance); //instantiate new instance of given subclass
}
用法:
abstract class Test1 {}
class Test2 extends Test1{ }
class Test {
public static T foo(Class clazz) {
T toReturn = null;
try{ toReturn = clazz.newInstance(); } catch (Exception e) { };
return toReturn ;
}
public static void main(String[] args) {
Test1 t1 = t.foo(test2.class);
System.out.println(t1.getClass()); //prints "class pkgname.test2"
}
}