【问题标题】:Getting all classes in a package, and turning them into a FooBar variable获取包中的所有类,并将它们转换为 FooBar 变量
【发布时间】:2014-06-13 14:44:44
【问题描述】:

我的包中有很多类都扩展FooBar,我希望创建一个ArrayList<FooBar> 变量。

到目前为止,我只是在启动时将它们一一添加到 ArrayList 中,我讨厌它,因为我经常忘记将其添加到列表中。

【问题讨论】:

标签: class arraylist


【解决方案1】:

对我来说听起来像 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);

【讨论】:

  • 谢谢,但是,我遇到问题的部分是获取 ArrayList
  • 你的意思是 ArrayList 还是 ArrayList>?仍然不确定你到底打算做什么。
  • 包中的所有类都扩展了 FooBar,我一直将它们添加到数组列表中,就像在 foobarArrayList.add(new SomeRandomClassThatExtendsFooBar()); 中一样,但我希望它自动将它们添加到 ArrayList..
  • 好的,使用上面的代码(并假设每个类都提供一个默认构造函数)它会类似于for (final Class&lt;? extends FooBar&gt; clazz : subTypes) {foobarArrayList.add(clazz.newInstance();}。请记住,这已经可以被视为一个丑陋的黑客。这不是很好的编码风格...
猜你喜欢
  • 2021-01-07
  • 2015-03-17
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2018-01-28
  • 2018-03-21
相关资源
最近更新 更多