Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查java.lang.reflect.Method返回类型是否为Collection?_Java_Reflection_Collections - Fatal编程技术网

如何检查java.lang.reflect.Method返回类型是否为Collection?

如何检查java.lang.reflect.Method返回类型是否为Collection?,java,reflection,collections,Java,Reflection,Collections,我有一个方法可以得到如下所示的bean属性列表。如何检查方法返回类型是否为集合(如List、Set…)。iInstance(Collection.class)不起作用 public static List<String> getBeanProperties(String className, boolean withLists) { ArrayList<String> a = new ArrayList(); try { Class c

我有一个方法可以得到如下所示的bean属性列表。如何检查方法返回类型是否为集合(如List、Set…)。iInstance(Collection.class)不起作用

public static List<String> getBeanProperties(String className, boolean withLists) {

    ArrayList<String> a = new ArrayList();
    try {
        Class c = Class.forName(className);
        Method methods[] = c.getMethods();
        for (int i = 0; i < methods.length; i++) {
            String m = methods[i].getName();
            if(m.startsWith("get") && methods[i].getParameterTypes().length == 0) {

                if((methods[i].getReturnType().isInstance(Collection.class)) && !withLists) {
                    // skip lists
                } else {
                    String f = m.substring(3);
                    char ch = f.charAt(0);
                    char lower = Character.toLowerCase(ch);
                    f = lower + f.substring(1);
                    a.add(f);
                }
            }
        }
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }

    return a;
}
publicstaticlist getBeanProperties(字符串类名称,booleanWithList){
ArrayList a=新的ArrayList();
试一试{
类别c=类别forName(类别名称);
方法methods[]=c.getMethods();
for(int i=0;i
使用
Collection.class.isAssignableFrom(returnType)

Method#getReturnType
返回单个类对象,即与方法声明相对应的类对象。如果该方法被声明为返回一个
集合
,您将看到一个集合。如果声明返回
Collection
List',..)的子类,则需要检查
Collection`是否可从实际返回类型分配:

 Class<?> realClass = methods[i].getReturnType(); // this is a real class / implementation
 if (Collection.isAssignableFrom(realClass)) {
    // skip collections (sic!)
 }
Class realClass=methods[i].getReturnType();//这是一个真正的类/实现
if(Collection.isAssignableFrom(realClass)){
//跳过集合(原文如此!)
}

Nice!。非常感谢。你跑得很快!:)这就是为什么我们付给他一大笔钱。