如何訪問泛型的Class對象?如何訪問泛型的Class對象?
目前,我做這樣說:
List<String> list= new ArrayList<String>();
list.getClass();
這樣行嗎?或者,應該怎樣?
如何訪問泛型的Class對象?如何訪問泛型的Class對象?
目前,我做這樣說:
List<String> list= new ArrayList<String>();
list.getClass();
這樣行嗎?或者,應該怎樣?
這將返回相同的ArrayList.class。 Java泛型在運行時擦除泛型類型;換句話說,從「列表」你永遠不會知道元素類型是字符串。還有在
http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
這是事實,刪除使它不可能得到一個給定對象的泛型類型的信息在這個偉大的FAQ,由於仿製藥在源代碼的結構只舉行。但是,這並不意味着不可能獲得泛型類型參數,並且在許多重要情況下(例如,構建給定類/方法的接口),您可以執行此操作。如果通過反射獲得類的元素,則可以獲得有關所使用的聲明類型的通用信息。
例如,通過獲取反射一個java.lang.reflect.Method
的保持,並調用例如getGenericReturnType()就可以了。這將返回的java.lang.reflect.Type
一個實例,它可以是一個簡單的Class
但也可能是ParameterizedType
一個實例,甚至WildcardType
在適當情況下。後面這兩種情況都允許您查看聲明的泛型類型。我不知道有任何特別優雅的方式比instanceof
檢查來處理這等,但這些信息是存在的,如果你需要它。
這可以使信息在泛型類型的字段,方法參數和返回類型,而類本身(包括其自己的泛型參數和那些其超和實現的接口)的。如果您需要在反射上下文中爲泛型方法進行類型安全的參數檢查,這可能非常有用。