Как проверить, что метод возвращает коллекцию в Java?
Я хочу проверить, существует ли метод в интерфейсе на основе его сигнатур.
подпись, которую должен иметь метод:
Collection<Foo> methodName(Spam arg0, Eggs arg1, ...)
Я могу найти методы через Class.getMethods()
затем найдите имя, параметры и тип возврата соответственно с method.getName()
, method.getParameterTypes()
и method.getReturnType()
.
но что я сравниваю с типом возврата, чтобы гарантировать, что только методы, которые возвращают Collection<Foo>
выбираются, а не другие сборники?
method.getReturnType().equals(Collection.class)
так как выше будет верно для всех методов, которые возвращают коллекцию, а не только для тех, которые возвращают Foo
коллекция.
3 ответов
есть метод с именем 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/
параметры универсального типа не сохраняются во время выполнения (т. е. это только функция времени компиляции) в Java, поэтому вы не можете этого сделать.