2

我定义了以下接口:

public interface AllImplementMe<X, Y> {
    public Y doSomething(X param);
}

现在我想定义一个工厂方法,它需要在运行时为上述构造子类。

public static <X,Y> AllImplementMe<X, Y> createInstance(String xClassName, String yClassName) { ... }

我如何实际编码上述方法?我一直在研究反射 API,但无法弄清楚?假设所有子类都有一个默认构造函数。

编辑1

我只想对上述代码的意图进行一些说明。以上只是通用系统的一部分,它将允许在运行时添加新的实现子类并根据外部定义的配置执行。所以实际上工厂方法将基于此配置被调用并构造适当的子对象,然后将被要求执行它们的方法。这在概念上类似于 Adnroid 的 AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html,但问题是我需要以通用方式构造实现子类对象。在大多数情况下,调用这些子代的核心代码并不关心它们的参数类型。

4

2 回答 2

2

请改用以下工厂方法:

public static <X, Y> AllImplementMe<X, Y> createInstance(Class<X> xClass, Class<Y> yClass)

然后,您可以使用诸如xClass.newInstance()创建X. (我没有写确切的代码,因为我不知道你想用Xand做什么Y。)

于 2013-02-27T13:13:35.100 回答
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>();
}
于 2013-02-27T13:19:57.773 回答