2014-11-04 105 views
1

是否可以實例化在抽象類中作爲泛型類型參數提供的類?如何通過泛型類型實例化?

例子:

public MyClass { 
    public MyClass(String test) { 

    } 
} 

是否可以實例化另一個抽象類裏面這個類?

public abstract class AbstractClass<T extends MyClass> { 
    public AbstractClass() { 
     T t = new T("test"); //Cannot instantiate the type T 
    } 
} 

回答

5

這不是那麼直截了當。

您需要一個Class<T>,它將在刪除類型後保留通用類型。

然後,您必須調用Class#getDeclaredConstructor(Class<?> .. params)來觸發所需的構造函數並動態創建新實例。例如:

public abstract class AbstractClass<T extends MyClass> { 
    public AbstractClass(Class<T> clazz) { 
     T t = clazz.getDeclaredConstructor(String.class).newInstance("test"); 
    } 
}