我刚刚注意到有一个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