获取List中元素的类型,其中List是java中方法的返回类型

moh*_*oha 4 java reflection collections

我使用反射获取包中的每个方法,然后根据每个方法的返回类型,我想做一些操作。但不幸的是我在收藏方面遇到了问题。当我找到一个返回像 List 这样的集合的方法时,我找不到方法来了解 List 元素的类型。我使用下面的代码来获取我的方法的返回类型。

if (method.getReturnType().equals(List.class)){
    statement;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码确实工作得很好,并获取了返回列表的每个方法,但它只是返回 java.util.List 作为返回类型,我找不到一种方法来了解该列表中元素的类型。例如,如果我有这样的方法:

public List<CmsCustomerModel> getCustomerModel(){
    statement;
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何获取 CmsCustomerModel 类作为返回列表的元素类型。我想知道是否有人帮我找到这个。请指导我。

Jon*_*eet 5

您可以使用getGenericReturnType它返回 aType而不是 a Class,并允许您获取所有类型参数等。简短但完整的示例:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出包括:

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
Run Code Online (Sandbox Code Playgroud)