在Java 中,處理泛型類別時,通常需要確定泛型類型所持有的具體類型運行時。然而,泛型類型資訊在編譯過程中會被刪除,這使得直接存取它成為一個挑戰。
讓我們考慮一個例子:
public class MyGenericClass<T> { public void doSomething() { T instance = (T) thirdPartyLib.create(T.class); } }
在這種情況下,T.class 將產生一個由於泛型類型 T 未知,因此出現非法類文字錯誤。為了解決這個問題,需要一種解決方法。
一種有效的解決方法是將類型作為參數傳遞給靜態方法,該方法將向泛型類別提供類別資訊。以下是一個範例:
public class MyGenericClass<T> { private final Class<T> type; public static <U> MyGenericClass<U> createWithClass(Class<U> type) { return new MyGenericClass<>(type); } private MyGenericClass(Class<T> type) { this.type = type; } public void doSomething() { T instance = type.newInstance(); } }
此方法可讓您明確傳遞類別類型,確保泛型類別可以存取必要的資訊。雖然此解決方法可能不是最優雅的解決方案,但它提供了一種可靠的方法來在運行時確定泛型類型的類別。
以上是如何在運行時確定Java中泛型類型的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!