具有多态性和工厂类的泛型

时间:2015-01-29 10:40:03

标签: java generics design-patterns factory-pattern

我制作了几个类结构,现在我在工厂类中创建它们有问题。 我有通用接口:

interface GenericInterface<T>{
  T someMethod(T instance);
}

和子类如:

class Class_A implements GenericInterface<String>{
  String someMethod(String instance){//impl};
}

class Class_B implements GenericInterface<Integer>{
  Integer someMethod(Integer instance){//impl};
}

现在的问题是我需要工厂类,如:

class FactoryClass{
  static <T> GenericInterface<T> getSpecificClass(T instance){
    //errors
    if(instance instanceof String) return new Class_A;
    if(instance instanceof Integer) return new Class_B;
}

以及其他地方:

String test = "some text";
GenericInterface<String> helper = FactoryClass.getSpecificClass(test);
String afterProcessing = helper.someMethod(test);

因此,对于String对象作为参数,我应该获得Class_A实例,而对于Integer,我应该获得Class_B实例。 现在我发现Class_A不是GenericInterface<T>的子类型的错误。我可以将Factory类中的返回类型更改为原始类型GenericInterface,但它似乎不是解决方案,因为我在整个项目中都收到了警告。

您是否有任何建议如何实现此类功能,可能具有不同的设计模式?由于someMethod()的进一步多态调用,我需要通用的超级接口。

1 个答案:

答案 0 :(得分:1)

根据您的使用情况,我认为您需要一个像

这样的界面
interface GenericInterface<T>{
    T someMethod(T input);
}

现在,您应该拥有像

这样的工厂类
class FactoryClass {
    static <T, S extends GenericInterface<T>> S getSpecificClass(T instance) {
        if(instance instanceof String) return new Class_A();
        if(instance instanceof Integer) return new Class_B();
        return null;
    }
}

希望这有帮助。
祝你好运。