在运行时创建具有泛型类的类

时间:2013-02-27 13:03:14

标签: java generics

我定义了以下界面:

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,我需要以通用方式构造实现子类对象。在大多数情况下,调用这些孩子的核心代码并不关心他们的参数类型。

2 个答案:

答案 0 :(得分:2)

请改用以下工厂方法:

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

然后,您可以使用xClass.newInstance()之类的内容来创建X的实例。 (我没有写完确的代码,因为我不确切地知道你想对XY做些什么。)

答案 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>();
}