这是一个很好的教程,显示了如何以及何时可以使用反射读取泛型。例如从firs
foo方法获取String
public void foo(List<String> s) { // ..}您可以使用此代码
class MyClass { public static void foo(List<String> s) { // .. } public static void main(String[] args) throws Exception { Method method = MyClass.class.getMethod("foo", List.class); Type[] genericParameterTypes = method.getGenericParameterTypes(); for (Type genericParameterType : genericParameterTypes) { if (genericParameterType instanceof ParameterizedType) { ParameterizedType aType = (ParameterizedType) genericParameterType; Type[] parameterArgTypes = aType.getActualTypeArguments(); for (Type parameterArgType : parameterArgTypes) { Class parameterArgClass = (Class) parameterArgType; System.out.println("parameterArgClass = " + parameterArgClass); } } } }}输出: parameterArgClass =类java.lang.String
可能是因为您在源代码中明确声明List只能包含字符串。但是以防万一
public <T> void foo2(List<T> s){ //reflect s somehow to get T}T可以是任何东西,因此由于类型擦除,不可能检索有关精确T类的信息。



