我目前正在研究一些反思的东西,我只是一个初学者。
我明白了:
List<X> list;
Set<Class<? extends X>> set;
我想做这样的事情:
for (Class<? extends X> classx : set) list.add(classx);
但我无法找到如何实现它的任何事情。 有人能帮助我吗?
答案 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);
最后一个看起来不错,它应该有效。