我在类中定义了一个方法:
public void setCollection(Collection
在另一个班级
public void setCollection(Collection
(实际上,很多类似的课程)
所有都在具有相同超类的类中,并且我在支持类中有一个方法,我想调用此方法并使用正确类类型的项设置它.现在,我可以通过这样做来设置收藏
Method setter = ...;
Class> paramClass = setter.getParameterTypes()[0]; // Is Collection in this case
if(paramClass.equals(Collection.class)) {
HashSet col = new HashSet();
// fill the set with something
setter.invoke(this,col);
}
但是,我如何确定此集合中的对象应该属于哪个类?
干杯
聂
最佳答案
Method.getGenericParameterTypes();
返回参数接受的Types数组.复杂性从那里呈指数级增长.
在您的具体情况下,这将工作:
Method m = Something.class.getMethod("setCollection",Collection.class);
Class> parameter = (Class>) ((ParameterizedType) m.getGenericParameterTypes()[0]).getActualTypeArguments()[0];
但是那里存在很多潜在的问题,具体取决于参数的声明方式.如果它像你的例子一样简单,那很好.如果没有,那么在getGenericParameterTypes()方法和getActualTypeArguments()方法中都有一些类型需要考虑.它变得非常毛茸茸,非常快.