检索集合的类型

nev*_*219 2 java generics reflection collections

所以我在Java中有以下内容:

private List<SomeType>variable;

// ....variable is instantiated as so ...
variable = new ArrayList<SomeType>();

// there's also a getter
public List<SomeType> getVariable() { /* code */ }
Run Code Online (Sandbox Code Playgroud)

我希望能够做到的是弄清楚这variable是一个以SomeType编程方式的集合 .我在这里读到我可以从方法中确定,getVariable()但有没有办法直接告诉我variable

我已经能够SomeType根据链接中的信息从getter方法中检索.我也成功地检索了周围班级的所有领域,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 */
Run Code Online (Sandbox Code Playgroud)

bma*_*ies 7

由于类型擦除,您无法从实例中获取此信息.在运行时,XXX<T>真的只是XXX.除非班级做出特殊安排来存储T的Class引用,否则它完全消失了.

你可以从getDeclaredFields()获得它.你必须在Field上调用getGenericType,而不是getType,然后你必须对ParameterizedType进行一些转换,然后向它询问你想要的参数.