Итак, у меня есть что-то вроде следующего в Java:
private List<SomeType>variable;
// ....variable is instantiated as so ...
variable = new ArrayList<SomeType>();
// there's also a getter
public List<SomeType> getVariable() { /* code */ }
То, что я хотел бы сделать, это выяснить, что variable
- это коллекция SomeType
программно. Я прочитал здесь , что я могу определить это по методу getVariable()
, но есть ли способ отличить напрямую от variable
?
Мне удалось получить SomeType
из метода получения, основываясь на информации в ссылке. Мне также удалось получить все поля окружающего класса через SurroundingClass.getClass().getDeclaredFields()
, но это не говорит мне, что это List<SomeType>
.
РЕДАКТИРОВАТЬ: Основываясь на ответе bmargulies, выполнение следующих действий приведет к тому, что я хочу:
Field[] fields = SurroundingClass.getDeclaredFields();
/* assuming it is in fields[0] and is a ParameterizedType */
ParameterizedType pt = (ParameterizedType) fields[0].getGenericType();
Type[] types = pt.getActualTypeArguments();
/* from types I'm able to see the information I've been looking for */