我使用反射获得了包中的每个方法,然后根据每个方法的返回类型,我想做一些操作。但不幸的是,我在收集方面遇到了一个问题。当我找到一个方法返回一个集合(如List)时,我找不到一种方法来了解List元素的类型。我使用下面的代码来获取方法的返回类型。
if (method.getReturnType().equals(List.class)){
statement;
}
上面的代码确实工作得很好,并获得返回列表的每个方法,但它只是返回java.util.List作为返回类型,我找不到一种方法来了解该列表中元素的类型。例如,如果我有这样一个方法:
public List<CmsCustomerModel> getCustomerModel(){
statement;
}
我不知道如何获得CmsCustomerModel类作为返回列表的元素类型。我想知道有没有人能帮我找到这个。请引导我。
您可以使用返回Type
而不是Class
的getGenericReturnType
,并允许您获得所有类型参数等。简短但完整的示例:
import java.lang.reflect.*;
import java.util.*;
public class Test {
public static void main(String [] args) {
for (Method method : Test.class.getMethods()) {
System.out.println(method.getName());
Type type = method.getGenericReturnType();
System.out.println("Return type: " + type.getTypeName());
if (type instanceof ParameterizedType)
{
ParameterizedType pt = (ParameterizedType) type;
System.out.println("Parameterized: " + pt.getRawType());
for (Type arg : pt.getActualTypeArguments())
{
System.out.println(" " + arg);
}
}
}
}
public static List<Integer> getNumbers() {
return null;
}
public static List<String> getStrings() {
return null;
}
}
输出包括:getStrings
Return type: java.util.List<java.lang.String>
Parameterized: interface java.util.List
class java.lang.String
getNumbers
Return type: java.util.List<java.lang.Integer>
Parameterized: interface java.util.List
class java.lang.Integer