Java中的泛型+接口

时间:2016-02-08 10:11:33

标签: java generics

考虑这个例子:

class Parent<T> implements MyInterface<T> {...}
class Child1 extends Parent<ConcreteType1>{...}
class Child2 extends Parent<ConcreteType2>{...}

然后是以下工厂:

public class Factory<T> {
    public static <T> Parent<T> getChild(Type type) {
        switch (type) {
            case value1:
                return new Child1();
            case value2:
                return new Child2();
        }
    }
}

Type参数只是enum

现在,

  • 如果我遗漏上述内容,则会收到以下错误:无法将Child1转换为Parent<T>
  • 如果我删除了代理,只留下Parent而不是Parent<T>,我会收到警告

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

该方法并不真正知道T的确切类型,因此您只需返回Parent<?>

public static Parent<?> getChild(Type type) {
    ...
}

或者,您可以扩展Type类以实际构建子项,并且可以控制确切的输出:

public static <T> Parent<T> getChild(Type<T> type) {
    return type.createChild();
}