如何制作类的ArrayList?

如何将一堆类添加到ArrayList ,然后从ArrayList检索一个Class(派生自,但不是MyBaseClass )并使用它来生成检索到的实际Class的新对象(即不是MyBaseClass因为那样是抽象的)

所有需要添加的类都派生自相同的抽象基类( MyBaseClass

我真的想不出另一种方法来实现我想做的事情,所以希望这是可能的……?

为了防止使用reflection,您可能正在寻找抽象工厂模式 。 这是一个如何使用Java 8实现它的简单示例:

 private void run() { List> factories = Arrays .asList(Impl1::new, Impl2::new, Impl3::new); List baseClassInstances = factories.stream() .map(Supplier::get) .collect(Collectors.toList()); } public abstract class MyBaseClass { } public class Impl1 extends MyBaseClass { } public class Impl2 extends MyBaseClass { } public class Impl3 extends MyBaseClass { } 

另请参见如何根据用户选择选择应实例化哪个具体实现?

以下是我认为您要求的内容:

 // get a list from somewhere List list = new ArrayList(); // call list.add(...) a few times // iterate over all the objects and check their sub class with "instanceof" for (MyBaseClass item : list) { if (item instanceof MySubClass) { MySubClass subItem = (MySubClass) item; item.doThing(); } else if (item instanceof OtherSubClass) { OtherSubClass subItem = (OtherSubClass) item; item.doThing(); } } 

但是如果你发现自己需要检查对象是否是特定类的实例,那么你可能做错了什么。 尝试在MyBaseClass中创建一个抽象方法,该方法可以由每个子类以自己特殊的方式实现。 然后,您可以将for循环简化for

 for (MyBaseClass item : list) { item.doThing(); }