如何创建类的 ArrayList?

Posted

技术标签:

【中文标题】如何创建类的 ArrayList?【英文标题】:How to create an ArrayList of Classes? 【发布时间】:2011-12-15 04:28:59 【问题描述】:

我有一些类(CarMotorcycleTrain ... 等)从 class Vehicle 扩展而来。 从另一个类中,我需要创建一个 ArrayList 类,以便仅访问包含 ArrayList 的类。

概念与此类似,但显然行不通;

ArrayList<Class> vehicleType=new ArrayList<Class>();
vehicleType.add(Class.forName("train"));

我该如何解决? 谢谢

【问题讨论】:

没有理由不这样做。您收到了哪些错误消息(如果有)? Class.forName("Train") 也许?区分大小写? 我不熟悉java,但是ArrayList&lt;Vehicle&gt; 做你想做的事吗? 也许类名是Train,而你的forName()调用指定了train,第一个字母不匹配? 警告不是问题。要让它真正发挥作用,请按照 Dave 的回答。我猜你得到的警告是关于未参数化的类引用。使用这个:ArrayList&lt;Class&lt;? extends Vehicle&gt;&gt;. 【参考方案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&lt;? extends Vehicle&gt;

【讨论】:

【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章

Java容器类的深入理解

Arraylis类

如何创建类的 ArrayList?

JDK1.8源码学习-ArrayList

ArrayList的使用

简易版Java ArrayList(增删改查)