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

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()的进一步多态调用,我需要通用的超级接口。

最佳答案

从您的用法来看,我相信您需要一个类似

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;
    }
}


希望这可以帮助。
祝好运。

关于java - 具有多态性和工厂类的泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28212585/

10-09 03:41