2012-12-31 165 views
-1

可能重复:
Create instance of generic type in Java?泛型类的创建实例

我得到了这些类

public abstract class Base { 
    public String Id = "originalId"; 
} 

public class InstanceOfBase extends Base { 
    public void setString(String test) { 
     this.Id = test; 
    } 
} 

public class UseIt { 
    public Test<InstanceOfBase> test = new Test<InstanceOfBase>(); 

    public void run() { 
     InstanceOfBase instanceOfBase = test.createMe(); 
     System.out.println(instanceOfBase.Id); 
    } 
} 

public abstract class Test<E extends Base> { 
    public E createMe() { 
     // How do I do this? 
     return new E(); 
    } 
} 

上面的代码无法编译,因为它不知道如何创造E.我怎么能做到这一点?

当我调用run方法时,我期望它应该打印“originalId”。

+0

Java反射 – SJuan76

+0

需要注意的是,为什么它是不可能没有反映的原因之一是,如果'InstanceOfBase'有一个私人的构造函数,例如,它不会实例化与'new' 。 – assylias

回答

2

不幸的是,你不能在java中从泛型类型创建类。但是你可以做贾斯汀陆克文在this thread和写建议:

public E createMe(Class<E> clazz) 
{ 
    return clazz.newInstance(); 
} 

所以你使用class原型创建一个新的实例。调用它可能是:

InstanceOfBase instanceOfBase = test.createMe(test.getClass)