我有一些类(Car
、Motorcycle
、Train
等),它们都是从Vehicle
类继承而来的。
从另一个类中,我需要创建一个ArrayList
,只能访问包含在该ArrayList
中的类。
这个概念类似于这个,但显然它不起作用;
ArrayList<Class> vehicleType=new ArrayList<Class>();
vehicleType.add(Class.forName("train"));
如何解决这个问题?谢谢。
大多数答案遵循您使用 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>
的列表。如果您要使用类加载器 (Class.forName
),您需要使用完全限定的类名,即 Class.forName("com.package.Train");
,就像您从命令行引用它一样。
尝试:
ArrayList<Class<? extends Vehicle>> vehicleType=new ArrayList<? extends Vehicle>();
vehicleType.add(Train.class);
这将确保添加到 vehicleType
的所有类都会扩展 Vehicle
。并且,类 Train
实际存在。
很少需要以这种方式使用类。尝试找到更简单的解决问题的方法。
Class.forName("Train") 也许是这样吗?区分大小写吗?
vehicleType.add(Class.forName(train.class.getName()));
无论如何,如果您不告诉我们错误(或异常)信息,我们就无法提供更进一步的帮助。
ArrayList<Vehicle>
是否符合您的需求? - Mooing DuckArrayList<Class<? extends Vehicle>>
。 - G_H