Как проверить, что тип возвращаемого значения java.lang.reflect.Method - это Collection? - PullRequest
5 голосов
/ 03 ноября 2010

У меня есть способ получить список свойств бина, как показано ниже. Как проверить, что возвращаемый метод является коллекцией (например, List, Set ...). isInstance (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;
}

Ответы [ 2 ]

15 голосов
/ 03 ноября 2010

используйте Collection.class.isAssignableFrom(returnType). Ссылка

1 голос
/ 03 ноября 2010

Method#getReturnType возвращает один объект Class, объект Class, который соответствует объявлению метода. Если объявлено, что метод возвращает Collection, вы увидите коллекцию. Если объявлено, что он возвращает подкласс Collection (List', ..), you'll need to check, if Collection` можно назначить из фактического типа возврата:

 Class<?> realClass = methods[i].getReturnType(); // this is a real class / implementation
 if (Collection.isAssignableFrom(realClass)) {
    // skip collections (sic!)
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...