从班级<! - ?将X - >扩展为X.

时间:2017-08-14 15:06:18

标签: java reflection

我目前正在研究一些反思的东西,我只是一个初学者。

我明白了:

List<X> list;
Set<Class<? extends X>> set;

我想做这样的事情:

for (Class<? extends X> classx : set) list.add(classx);

但我无法找到如何实现它的任何事情。 有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

您无法使用该输入数据实现此类行为。 List<X>列表期望类X的实例,但您尝试添加类型Class<? extends X>的对象。 让我们假设类型X是Number(为简单起见),我们有Double,Integer,Character等,Number的子元素。 所以,你正在做下一件事: 您希望将类型为Class<Integer>的对象添加到仅包含Numbers的列表(不是Class<Integer>Class<Double>等等)。你唯一能做的就是用这种方式创建Class<Integer>Class<Double>的实例,使用反射:

List<X> list = //some values;
Set<Class<? extends X>> set = //some values;
for (Class<? extends X> classx : set) list.add(classx.newInstance());

但是以这种方式使用反射是个糟糕的主意。 也许你的意思是:

List<Class<X>> list = //some values;
Set<Class<? extends X>> set = //some values;
for (Class<? extends X> classx : set) list.add(classx);

因为还是 Class<X>Class<? extends X>不同。 但也许你的意思是这样的:

List<X> list = //some values;
Set<? extends X> set = = //some values;
for (X elem : set) list.add(elem);

最后一个看起来不错,它应该有效。