我已经在一个类中定义了一个方法:
public void setCollection(Collection<MyClass>);
在另一个类
public void setCollection(Collection<OtherClass>);
(实际上,很多类似的类)
所有这些都在具有相同父类(super class)的类中,并且我在支持类中有一个方法,我想在其中调用此方法并使用正确的类类型的项对其进行设置。现在,我可以通过执行以下操作来设置 Collections
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()方法中考虑一堆类型。它变得非常毛茸茸,非常快。
关于Java反射: What does my Collection contain?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1764586/