java - Java中自动加载特定父类(super class)的子类的工厂类?

标签 java inheritance reflection static-libraries factory

在描述我的问题之前,我想说的是,我怀疑我可能只是缺少要搜索的正确术语,这就是为什么我在 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/

相关文章:

java - 尝试运行 Java 多线程服务器时出现空指针异常

c# - 继承和构造函数中的错误

java - Spring 启动: MockMvc returning strange responses

java - 静态方法重写

eclipse - Eclipse 支持的用于删除父类(super class)依赖性的重构可能是什么?

c# - 通用 Windows 平台 (UWP) 中的反射缺少属性

java - 使用反射为 setter 方法赋值

java - 调用 Class.class.getClass() 时到底发生了什么?

java - 在MainActivity中从SecondActivity中接收一个字符串值,然后倒计时

javax.net.ssl.SSLHandshakeException : null cert chain null cert chain