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

问题描述

您可以使用getGenericReturnTypewhich返回a Type而不是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;
    }
}

输出包括

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

解决方法

我使用反射将包中的每个方法都获取了,然后根据每个方法的返回类型,我想执行一些操作。但不幸的是,我在收藏方面遇到了问题。当我找到一种方法来返回诸如List之类的集合时,我找不到找到有关List元素类型的方法。我使用下面的代码来获取方法的返回类型。

if (method.getReturnType().equals(List.class)){
    statement;
}

上面的代码运行良好,并获得了所有返回List的方法,但它只是将java.util.List作为返回类型返回,而我找不到找到了解该List中元素类型的方法。例如,如果我有这样的方法:

public List<CmsCustomerModel> getCustomerModel(){
    statement;
}

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”