如何向ArrayList<MyBaseClass>
添加一堆类,然后从MyBaseClass
检索一个类(从ArrayList
派生而不是MyBaseClass
)并使用它来生成一个新类检索到的实际类的对象(即不是MyBaseClass
,因为它是抽象的)
所有需要添加的类都派生自相同的 abstract 基类(ALTER USER [YOURDOMAIN\HotTester] WITH DEFAULT_SCHEMA=[dbo]
GO
)
我无法想到另一种方法来实现我想做的事情,所以希望这是可能的......?
答案 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();
}