【发布时间】:2014-06-13 14:44:44
【问题描述】:
我的包中有很多类都扩展FooBar,我希望创建一个ArrayList<FooBar> 变量。
到目前为止,我只是在启动时将它们一一添加到 ArrayList 中,我讨厌它,因为我经常忘记将其添加到列表中。
【问题讨论】:
-
1.哪种语言? 2. 你的代码呢?
我的包中有很多类都扩展FooBar,我希望创建一个ArrayList<FooBar> 变量。
到目前为止,我只是在启动时将它们一一添加到 ArrayList 中,我讨厌它,因为我经常忘记将其添加到列表中。
【问题讨论】:
对我来说听起来像 Java。获取包中的所有类很棘手,因为您必须使用 Java 反射 API。您可以使用反射 (http://code.google.com/p/reflections/) 来做到这一点。
Reflections reflections = new Reflections("my.project.prefix");
Set<Class<? extends FooBar>> subTypes = reflections.getSubTypesOf(FooBar.class);
【讨论】:
foobarArrayList.add(new SomeRandomClassThatExtendsFooBar()); 中一样,但我希望它自动将它们添加到 ArrayListfor (final Class<? extends FooBar> clazz : subTypes) {foobarArrayList.add(clazz.newInstance();}。请记住,这已经可以被视为一个丑陋的黑客。这不是很好的编码风格...