在我描述我的问题之前,让我说我怀疑我可能只是缺少要搜索的正确术语,这就是为什么我在 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”类公开为一个字符串列表,以便使用该库的应用程序知道他们可以调用什么?我可以迭代包的内容吗?
我对解决方案持开放态度,最重要的部分是将来添加新的“MySuper”子类应该非常轻松。
谢谢 :-)
更新:
我只想指出,我找到了一个很好的 Java 库,它以一种简单的方式处理反射,并允许您搜索特定类的子类型。所以我的问题可以用那个库来解决(我已经测试过了)。这是一个链接:http ://code.google.com/p/reflections/