考虑这个例子:
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>
,我会收到警告如何解决此问题?
答案 0 :(得分:3)
该方法并不真正知道T
的确切类型,因此您只需返回Parent<?>
:
public static Parent<?> getChild(Type type) {
...
}
或者,您可以扩展Type
类以实际构建子项,并且可以控制确切的输出:
public static <T> Parent<T> getChild(Type<T> type) {
return type.createChild();
}