在描述问题之前,请允许我说我怀疑我可能只是缺少正确的搜索词,这就是为什么我在stackoverflor上的搜索没有取得成果的原因。因此,也非常感谢与答案的链接。
我试图建立一个具有工厂的库,让我们称之为“ MyFactory”。 MyFactory的方法可以返回抽象类“ MySuper”的对象,但也可以将适当的子类公开给“ MySuper”。该库打算大量扩展,因此将经常添加“ MySuper”的子类,然后将库重新编译,并转储到使用它的应用程序的库文件夹中。
我想要的是能够将“ MySuper”的子类添加到库中,并使“ MyFactory”意识到这一点,而不需要创建新的“ MySuper”子集而无需做任何其他事情。
到目前为止,我通过将类名赋予方法来使“ MyFactory”创建“ MySuper”类型的新实例,如下所示:
public MySuper getSuperObject(String name) {
return (MySuper) Class.forName("my.package." + name).newInstance(); }
但是我如何才能让工厂将所有“ MySuper”类公开为f.x。字符串列表,因此使用该库的应用程序知道它们可以调用什么?我可以迭代包装内容吗?
我愿意接受解决方案,最重要的是,将来添加新的“ MySuper”子类应该非常轻松。
谢谢 :-)
更新:
我只想指出,我已经找到了一个不错的Java库,该库可以轻松处理反射,并允许您搜索特定类的子类型。因此,我的问题可以使用该库解决(我已经对其进行了测试)。这是链接:http://code.google.com/p/reflections/
最佳答案
您正在寻找Generic Factory Pattern
。就像是..
public static <T extends MySuper> T createDocument(Class<T> subClazz) throws InstantiationException, IllegalAccessException {
return subClazz.newInstance();
};
您可以在Google上搜索
Generic Factory Pattern
,并且会找到很多示例。