【发布时间】:2018-05-18 14:59:05
【问题描述】:
我会以我不是专业的 Java 程序员这一事实作为这个问题的开头。我来自强大的 C 嵌入式系统背景,但在大学时自学了 Java。
我正在创建一个简单的程序,其中有许多不同的数据“生产者”类。每个类都生成某种数据输出产品。
ArrayList< Class<? extends OtherClass> > list = new ArrayList< Class<? extends OtherClass> >();
//Register producers based on some criteria for the analysis being done
list.add(Producer1.class);
list.add(Producer2.class);
//Some time later, I want to create instances of those classes and link them to a 'report'
Report report = new Report();
report.addProducer( new list.get(0)() );
当然,上面的代码是行不通的。我能够创建一个类类型的 ArrayList,但我无法在以后实例化它们(至少我无法找到这样做的正确语法)。
我最初也打算使用interfaces 来执行此操作,但是用于创建类数组的语法似乎不像上述代码示例中的extends 那样工作。我尝试了以下方法,但语法检查失败:
ArrayList< Class<? implements OtherClass> > list = new ArrayList< Class<? implements OtherClass> >();
我四处寻找合适的答案,但不知道要问的正确问题/术语会使这变得困难。我找到了this 解决方案,但他们的意图可能不同。
当然,如果这可以通过更简单的方式完成,那么我愿意接受所有建议。
【问题讨论】:
-
extends关键字用于泛型类型定义中的类和接口。你只需要list.get(i).newInstance()来实例化类的一个对象(它需要有零参数的构造函数)。