Как проверить, что метод возвращает Collection <Foo>в Java? - PullRequest
6 голосов
/ 20 августа 2010

Я хочу проверить, существует ли метод в интерфейсе на основе его сигнатур.

Подпись, которую должен иметь метод:

Collection<Foo> methodName(Spam arg0, Eggs arg1, ...)

Я могу найти методы черезClass.getMethods() затем найдите имя, параметры и тип возвращаемого значения соответственно с помощью method.getName(), method.getParameterTypes() и method.getReturnType().

Но с чем сравнить тип возвращаемого значения, чтобы гарантировать, что возвращаются только те методы, которые возвращаютCollection<Foo> выбраны, а не другие коллекции?

method.getReturnType().equals(Collection.class) 

Поскольку вышеприведенное будет справедливо для всех методов, которые возвращают коллекцию, а не только для тех, которые возвращают Foo Коллекция.

Ответы [ 3 ]

8 голосов
/ 20 августа 2010

Существует метод с именем public Type getGenericReturnType(), который может вернуть (если это так) a ParameterizedType.

A ParameterizedType может дать вамдополнительные сведения об универсальном типе, например Collection<Foo>.

В частности, с помощью метода getActualTypeArguments() вы можете получить фактический тип для каждого параметра.

Здесь ParameterizedType представляет коллекцию иgetActualTypeArguments() представляет массив, содержащий Foo

Вы можете попробовать это, чтобы перечислить параметры вашего универсального типа:

Type returnType = method.getGenericReturnType();
if (returnType instanceof ParameterizedType) {
    ParameterizedType type = (ParameterizedType) returnType;
    Type[] typeArguments = type.getActualTypeArguments();
    for (Type typeArgument : typeArguments) {
        Class typeArgClass = (Class) typeArgument;
        System.out.println("typeArgClass = " + typeArgClass);
    }
}

Источники: http://tutorials.jenkov.com/

2 голосов
/ 20 августа 2010
0 голосов
/ 20 августа 2010

Параметры общего типа не сохраняются во время выполнения (т. Е. Это функция только во время компиляции) в Java, поэтому вы не можете сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...