在物件導向程式設計中,決定泛型類型的類別通常是必要的。但是,當使用泛型類別時,由於執行時的類型擦除,此任務變得具有挑戰性。
考慮以下範例,其中 MyGenericClass 嘗試使用第三方函式庫建立型別 T 的實例:
public class MyGenericClass<T> { public void doSomething() { // Create an instance of class T T bean = (T)someObject.create(T.class); } }
此方法失敗,並出現「型別參數 T 的類文字非法」錯誤。為了解決這個問題,一個常見的解決方法是將類型 T 作為參數傳遞給靜態方法:
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<U>(clazz); } protected MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { // Create an instance of class T T instance = clazz.newInstance(); } }
透過明確傳遞類別 T,程式碼可以成功建立所需類型的實例。雖然這種方法不如直接方法呼叫那麼優雅,但它為確定泛型類型的類別提供了可靠的解決方案。
以上是如何確定泛型類別中泛型類型的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!