【问题标题】:How to create an ArrayList of Classes?如何创建类的 ArrayList?
【发布时间】: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;.

标签: java class arraylist


【解决方案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()));

          无论如何,尽管您没有告诉我们错误(或异常)消息是什么,但我们无法进一步提供帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-20
            • 1970-01-01
            • 2017-01-15
            • 1970-01-01
            • 1970-01-01
            • 2017-04-08
            相关资源
            最近更新 更多