gpt4 book ai didi

Java 反射 : What does my Collection contain?

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:55 25 4
gpt4 key购买 nike

我在类中定义了一个方法:

public void setCollection(Collection<MyClass>);

在另一个类(class)

public void setCollection(Collection<OtherClass>);

(实际上,有很多类似的类)

所有这些都在具有相同父类(super class)的类中,我在支持类中有一个方法,我想在其中调用此方法并使用正确类类型的项目设置它。现在,我可以通过执行以下操作来设置集合

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();

返回参数接受的类型数组。复杂性从那里呈指数增长。

在您的特定情况下,这会起作用:

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com