在描述我的问题之前,我想说的是,我怀疑我可能只是缺少要搜索的正确术语,这就是为什么我在 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/
最佳答案
您正在寻找通用工厂模式
。类似的东西..
public static <T extends MySuper> T createDocument(Class<T> subClazz) throws InstantiationException, IllegalAccessException {
return subClazz.newInstance();
};
您可以在 google 上搜索通用工厂模式
,您会发现很多示例。
关于java - Java中自动加载特定父类(super class)的子类的工厂类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13266713/