2009-01-19 74 views

回答

3

這是事實,刪除使它不可能得到一個給定對象的泛型類型的信息在這個偉大的FAQ,由於仿製藥在源代碼的結構只舉行。但是,這並不意味着不可能獲得泛型類型參數,並且在許多重要情況下(例如,構建給定類/方法的接口),您可以執行此操作。如果通過反射獲得類的元素,則可以獲得有關所使用的聲明類型的通用信息。

例如,通過獲取反射一個java.lang.reflect.Method的保持,並調用例如getGenericReturnType()就可以了。這將返回的java.lang.reflect.Type一個實例,它可以是一個簡單的Class但也可能是ParameterizedType一個實例,甚至WildcardType在適當情況下。後面這兩種情況都允許您查看聲明的泛型類型。我不知道有任何特別優雅的方式比instanceof檢查來處理這等,但這些信息是存在的,如果你需要它。

這可以使信息在泛型類型的字段,方法參數和返回類型,而類本身(包括其自己的泛型參數和那些其超和實現的接口)的。如果您需要在反射上下文中爲泛型方法進行類型安全的參數檢查,這可能非常有用。