在描述问题之前,请允许我说我怀疑我可能只是缺少正确的搜索词,这就是为什么我在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,并且会找到很多示例。

08-05 01:26