[英]How to create generic type?
我定義了一個這樣的類:
public class MyClass<T implements MyInterface> {
public T getMy() {
return new T();
}
}
這不會編譯。 我不允許創建通用類型T。
我該如何解決? 有什么好的模式可以做到這一點嗎? 我可以通過使用抽象類而不是接口來解決此問題嗎? 我必須使用反射嗎?
您不能在此處使用implements
。
<T implements MyInterface> // can't use interface.
所以你可以在那里使用Abstract Class
<T extends MyAbstractClass>
public class MyClass<T extends MyInterface> {
T getMy(Class<T> clazz) throws InstantiationException, IllegalAccessException
{
return clazz.newInstance();
}
}
您可以通過傳遞實際的類類型(例如,傳遞給構造函數), Class<T>
並在默認構造函數確定的情況下對其調用newInstance()
來實現。 如果需要另一個構造函數,則需要使用反射API,例如,通過此類類型對象上的getDeclaredConstructors()
。
這里有幾個問題。
您創建有界的泛型類型的語法不正確; 您需要使用extends
關鍵字。 extends
這個意義上來說, extends
關鍵字更通用 ,因為它用來表示泛型類型可以擴展另一個類或實現一個接口。
您不能直接實例化泛型類型。 這是一種更笨拙的方式(實際上沒有反射),這是此Stack Overflow答案提供的 :
public T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException { return clazz.newInstance(); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.