Как найти параметризованный тип возвращаемого типа через проверку? - PullRequest
2 голосов
/ 31 июля 2009

Я использую отражение, чтобы получить все методы get в классе, подобном этому:

Method[] allMethods = c.getDeclaredMethods();

После этого я перебираю методы

for (Method m: allMethods){
    //I want to find out if the return is is a parameterized type or not
    m.getReturnType();
}

Например: если у меня есть такой метод:

public Set<Cat> getCats();

Как я могу использовать отражение, чтобы узнать, что возвращаемый тип содержит Cat в качестве параметризованного типа?

1 Ответ

8 голосов
/ 31 июля 2009

Вы пробовали getGenericReturnType()?

Возвращает объект Type, который представляет формальный тип возврата метода, представленного этим объектом Method.

Если возвращаемый тип является параметризованным типом, возвращаемый объект Type должен точно отражать фактические параметры типа, используемые в исходном коде.

Если возвращаемый тип является переменной типа или параметризованным типом, он создается.В противном случае, это решено.

Затем (глядя на Javadocs) кажется, что вы должны привести его к ParameterizedType и вызвать getActualTypeArguments().

Вот пример кода:

    for (Method m : allMethods) {
        Type t = m.getGenericReturnType();
        if (t instanceof ParameterizedType) {
            System.out.println(t);       // "java.util.Set<yourpackage.Cat>"
            for (Type arg : ((ParameterizedType)t).getActualTypeArguments()) {
                System.out.println(arg); // "class yourpackage.Cat"
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...