Есть ли общий подход к отражению, чтобы выяснить, возвращает ли java-метод набор объектов, таких как массив, список, набор, коллекция и другие итерируемые подынтерфейсы?
Дело в том, что мне нужно проверить тип возвращаемого значения стороннего метода и сказать две вещи:
- Возвращает ли метод набор объектов (в
человеческий смысл)?
- Если да - какой тип компонента?
Например, если тип возвращаемого метода - Vector<A>
, A[]
, Set<A>
и т. Д., Я хочу, чтобы мой код возвращал A
.
Я новичок в рефлексии / дженериках, не хочу изобретать велосипед и не уверен, что мой подход правильный. Вот что я сделал до сих пор:
private boolean isMultiple(Class clazz) {
return clazz.isArray() || Iterable.class.isAssignableFrom(clazz);
}
private Class getReturnComponentType(Method m) {
Class clazz = m.getReturnType();
if(!isMultiple(clazz)) return clazz; // Not a collection
// Collection
if(clazz.isArray()) {
// How do I get Array's component type?
// return null;
} else {
// How do I get Iterable component type?
// return null;
}
}
Пожалуйста, помогите.