如何制作类的ArrayList?

时间:2015-09-14 18:22:50

标签: java class arraylist java-8 factory

如何向ArrayList<MyBaseClass>添加一堆类,然后从MyBaseClass检索一个类(从ArrayList派生而不是MyBaseClass)并使用它来生成一个新类检索到的实际类的对象(即不是MyBaseClass,因为它是抽象的)

所有需要添加的类都派生自相同的 abstract 基类(ALTER USER [YOURDOMAIN\HotTester] WITH DEFAULT_SCHEMA=[dbo] GO

我无法想到另一种方法来实现我想做的事情,所以希望这是可能的......?

2 个答案:

答案 0 :(得分:7)

为防止使用反射,您可能正在寻找Abstract Factory Pattern。以下是如何使用Java 8实现它的简单示例:

custom-row

另请参阅How should I select which concrete implementation should be instantiated based on the user choice?

答案 1 :(得分:3)

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

// get a list from somewhere
List<MyBaseClass> list = new ArrayList<MyBaseClass>();

// 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 (MyBaseClass item : list) {
    item.doThing();
}