我剛剛注意到有一個Method.getGenericReturnType()
以及Method.getReturnType()
和類似的異常類型和參數類型對。Java反射:Method.getGenericXXXXX方法如何工作?
我認爲Java中的泛型通過類型擦除工作。那麼這些方法在運行時如何工作呢? (我會在運行時使用它們嗎?)
我剛剛注意到有一個Method.getGenericReturnType()
以及Method.getReturnType()
和類似的異常類型和參數類型對。Java反射:Method.getGenericXXXXX方法如何工作?
我認爲Java中的泛型通過類型擦除工作。那麼這些方法在運行時如何工作呢? (我會在運行時使用它們嗎?)
保留聲明(方法,字段,類,參數)具有具體類型部分的泛型。
所以你可以從這個聲明
public List<String> toString(List<Foo> foos) { .. }
獲得的類型,但你從這個代碼不能:
public List<E> transform(List<E> list) {
// E is not accessible at runtime
}
泛型可以通過擦除工作,但代碼使用編譯後的類仍需要正確使用泛型。編譯器還有其他信息,您可以獲取該信息,但這不會改變其運行時行爲。
怪異的......所以如果我在做運行時方法調度(http://stackoverflow.com/questions/6021109/java-runtime-method-resolution)那麼我也必須擔心這方面? – 2011-05-16 17:51:31
(在第二個例子中,你不需要'List'之前的'') –
2011-05-16 17:52:12
我假定E是類聲明的一部分,但它也可能在方法中。 – Bozho 2011-05-16 17:58:34