如何创建类的 ArrayList?
Posted
技术标签:
【中文标题】如何创建类的 ArrayList?【英文标题】:How to create an ArrayList of Classes? 【发布时间】:2011-12-15 04:28:59 【问题描述】:我有一些类(Car
、Motorcycle
、Train
... 等)从 class Vehicle
扩展而来。
从另一个类中,我需要创建一个 ArrayList
类,以便仅访问包含 ArrayList
的类。
概念与此类似,但显然行不通;
ArrayList<Class> vehicleType=new ArrayList<Class>();
vehicleType.add(Class.forName("train"));
我该如何解决? 谢谢
【问题讨论】:
没有理由不这样做。您收到了哪些错误消息(如果有)? Class.forName("Train") 也许?区分大小写? 我不熟悉java,但是ArrayList<Vehicle>
做你想做的事吗?
也许类名是Train
,而你的forName()
调用指定了train
,第一个字母不匹配?
警告不是问题。要让它真正发挥作用,请按照 Dave 的回答。我猜你得到的警告是关于未参数化的类引用。使用这个:ArrayList<Class<? extends Vehicle>>
.
【参考方案1】:
大多数答案都遵循您使用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>
【讨论】:
【参考方案2】:如果您要使用类加载器 (Class.forName
),则需要使用完全限定的类名,即 Class.forName("com.package.Train");
,就像在命令行中引用它一样。
【讨论】:
【参考方案3】:试试:
ArrayList<Class<? extends Vehicle>> vehicleType=new ArrayList<? extends Vehicle>();
vehicleType.add(Train.class);
它将确保添加到vehicleType
的所有类都扩展Vehicle
。而且,Train
这个类确实存在。
很少需要以这种方式使用类。尝试找到一种更简单的方法来解决您的问题。
【讨论】:
【参考方案4】:Class.forName("Train") 也许?区分大小写?
【讨论】:
【参考方案5】:如果“train”是简单的类名,那么这将完成这项工作
vehicleType.add(Class.forName(train.class.getName()));
无论如何,尽管您没有告诉我们错误(或异常)消息是什么,但我们无法进一步提供帮助。
【讨论】:
以上是关于如何创建类的 ArrayList?的主要内容,如果未能解决你的问题,请参考以下文章