通用工厂方法和Class <t>参数</t>

时间:2011-12-01 19:19:58

标签: java generics

我有一个静态工厂方法,签名如下:

public static <F, T extends Provider<F>> T getProvider(Class<T> clazz)

我正在尝试实现返回Class<T>对象的方法,该对象是上面提到的getProvider的参数。但是这样的定义不起作用:

public <F, T extends Provider<F>> Class<T> getProviderClass() {
       return DefaultProvider.class;
}

你会建议什么?

2 个答案:

答案 0 :(得分:0)

 public Class<T> getProviderClass() {
    Type superClass = getClass().getGenericSuperclass();
    ParameterizedType type = (ParameterizedType) superClass;
    Type[] types = type.getActualTypeArguments();
    Class<T> providerClass = (Class<T>) types[0];
    return providerClass;
 }

您也可以将此代码放在构造函数中,将Class的实例变量设置为此方法提供的值,这样您就可以更轻松,更高效地访问它,以便在通用工厂中继续使用它

答案 1 :(得分:0)

你需要传入一个Class对象并用它做一些事情才能找到正确的DefaultProvider.class

您不能拥有通用工厂类。每种类型都需要在某处拥有自己的混凝土工厂。一个好的模式是让类通过静态方法提供它自己的默认工厂。

MyClass.getProvider()

您已定义MyClass和MyClassDefaultProvider并且getProvider返回MyClassDefaultProvider的实例

相关问题