我有一些从Car
延伸的课程(Motorcycle
,Train
,class Vehicle
...等)。
从另一个类我需要创建一个ArrayList
个类,只能访问那些包含ArrayList
的类。
这个概念与此类似,但显然它不起作用;
ArrayList<Class> vehicleType=new ArrayList<Class>();
vehicleType.add(Class.forName("train"));
我该如何解决? 感谢
答案 0 :(得分:9)
大多数答案都遵循您使用Class.forName()
的建议,尽管这不是必需的。您可以在类型名称上“呼叫”.class
。
看看这个JUnit测试:
@Test
public void testListOfClasses() {
List<Class<?>> classList = new ArrayList<Class<?>>();
classList.add(Integer.class);
classList.add(String.class);
classList.add(Double.class);
assertTrue("List contains Integer class", classList.contains(Integer.class));
}
我希望您的需求列表类型为Class<? extends Vehicle>
答案 1 :(得分:3)
如果您要使用类加载器(Class.forName
),则需要使用完全限定的类名,即Class.forName("com.package.Train");
,就像从命令行引用它一样。< / p>
答案 2 :(得分:2)
尝试:
ArrayList<Class<? extends Vehicle>> vehicleType=new ArrayList<? extends Vehicle>();
vehicleType.add(Train.class);
这将确保添加到vehicleType
的所有类都扩展Vehicle
。并且,该类Train
实际存在。
很少有必要以这种方式使用类。尝试找一种解决问题的简单方法。
答案 3 :(得分:1)
Class.forName(“火车”)也许吧?区分大小写?
答案 4 :(得分:0)
如果“train”是简单的类名,那么这将完成工作
vehicleType.add(的Class.forName(train.class.getName()));
无论如何,当你没有告诉我们什么是错误(或异常)消息时,我们无法进一步帮助。