使用泛型类型实例化抽象类的对象

Ahm*_*nas 5 java generics abstract-class

嘿伙计们希望你能帮助我.

基本上我正在创建一个泛型类型的函数,泛型类型是我需要实例化的抽象类型.此代码将更清楚地解释它:

public <T extends AbstractRow> foo(){//no I did not actually name the function foo
    ArrayList<T> arr=new ArrayList<T>();
    arr.add(new T(...)); //cant instantiate objects of abstract class


}
Run Code Online (Sandbox Code Playgroud)

基本上我想强制执行"T extends AbstractRow但不是抽象本身"

我意识到你无法实例化抽象类,所以我想要一个解决方法或其他方法的建议,这将允许我模仿创建泛型类型的对象的行为.提前致谢

dre*_*ore 3

您的主要问题不是您正在使用抽象类 - 在这种情况下,评论中发布的建议将很有用。更大的问题是你试图直接实例化一个泛型类型(阅读:new T())——简单地说,由于类型擦除,你不能在 Java 中这样做。

也就是说,总有一个解决方法:

/**@param clazz the subclass you want to instantiate */
public <T extends AbstractRow> foo(Class<T> clazz) { 
    ArrayList<T> arr = new ArrayList<T>();
    arr.add(clazz.newInstance); //instantiate new instance of given subclass
}
Run Code Online (Sandbox Code Playgroud)

用法:

abstract class Test1  {} 
class Test2 extends Test1{ }

class Test<T> {
   public static <T extends Test1> T foo(Class<T> 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"
  }
}
Run Code Online (Sandbox Code Playgroud)