我定义了以下界面:
public interface AllImplementMe<X, Y> {
public Y doSomething(X param);
}
现在我想定义一个工厂方法,它需要在运行时为上面构造子类。
public static <X,Y> AllImplementMe<X, Y> createInstance(String xClassName, String yClassName) { ... }
我如何实际编码上述方法?我一直在寻找反射API但无法弄明白?假设所有子类都有一个默认构造函数。
EDIT1
我只想补充一些关于上述代码意图的说明。以上只是通用系统的一部分,它允许在运行时添加新的实现子类,并根据外部定义的配置执行。因此实际上,将基于此配置调用工厂方法,并构造适当的子对象,然后将其要求执行其方法。这在概念上类似于Adnroid的AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html,我需要以通用方式构造实现子类对象。在大多数情况下,调用这些孩子的核心代码并不关心他们的参数类型。
答案 0 :(得分:2)
请改用以下工厂方法:
public static <X, Y> AllImplementMe<X, Y> createInstance(Class<X> xClass, Class<Y> yClass)
然后,您可以使用xClass.newInstance()
之类的内容来创建X
的实例。 (我没有写完确的代码,因为我不确切地知道你想对X
和Y
做些什么。)
答案 1 :(得分:1)
一切都简单得多。您甚至不需要这些参数String xClassName, String yClassName
。
考虑一下你的界面实现:
public class SomeImplementation<A,B> implements AllImplementMe<A,B> {
@Override
public B doSomething(A param) {
// ... blablabla ...
}
}
然后你的静态工厂方法就是:
public static <A, B> AllImplementMe<A, B> createInstance() {
return new SomeImplementation<A,B>();
}