2012-12-31 206 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)