在泛型程式設計領域,確定當前泛型類型的特定類別通常變得至關重要使用。然而,Java 的泛型類型擦除機制對這項努力提出了挑戰。
為了解決這個問題,讓我們深入研究一個模擬現實世界場景的範例:
public class MyGenericClass<T> { public void doSomething() { // Imagine a 3rd party library call that expects a Class object T bean = (T) someObject.create(T.class); } }
不幸的是,上面的程式碼將失敗並出現「型別參數T 的類文字非法”錯誤。這是因為泛型類型資訊在運行時被擦除,導致無法直接使用 T.class。
那麼,我們要如何克服這個障礙呢?一個可行的解決方案出現了:引入一個接受所需類別作為參數的靜態工廠方法。
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<>(clazz); } private MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { T instance = clazz.newInstance(); } }
這種方法允許您在物件建立期間明確指定泛型類,從而有效地繞過運行時擦除問題。然而,它確實有一個缺點:它添加了一些樣板程式碼並使 API 稍微複雜化。儘管如此,當類別類型的確定必不可少時,它仍然是一種有效的解決方法。
以上是Java中如何確定泛型類型的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!