我有两个同构类型层次结构。第一个基本类型是BaseA,第二个基本类型是BaseB。我知道如何将BaseB的任何子类的任何对象转换为其相应的BaseA子类型。我想实现一个方法,它使用BaseB类型的对象来确定它的类并构造相应的BaseA子类型的对象。示例代码:Java泛型:<B extends BaseB>不匹配<?扩展BaseB>
public interface BaseA...
public interface BaseB...
public class DerA implements BaseA...
public class DerB implements BaseB...
...
public interface Transform<A,B> {
A toA (B b);
}
public class DerAtoDerB implements Transform<DerA,DerB> {
DerA toA (DerB b){...}
}
public class Transformations {
private static Map<Class<?>, Transform<? extends BaseA, ? extends BaseB>> _map =
new HashMap<>();
static {
_map.put(DerB.class, new DerAtoDerB());
}
public static <B extends BaseB> BaseA transform(B b){
Transform<? extends BaseA, ? extends BaseB> t = _map.get(b.getClass());
return t.toA(b); // Compile error: Transform<A,B#2> cannot be applied to given types
}
为什么<B extends BaseB>
是不兼容<? extends BaseB>
?另外,如果我尝试实现静态变换方法是这样的:
public static BaseA transform(BaseB b){
Transform<? extends BaseA, ? extends BaseB> t = _map.get(b.getClass());
return t.toA(b); // Compile error: Transform<A,B> cannot be applied to given types
}
我得到一个编译错误:Transform<A,B> cannot be applied to given types
任何人都可以解释我什么,我做错了泛型?
第一个答案可能是你http://stackoverflow.com/questions/16449799/how-do-generics-of-generics-work – aalku 2014-10-09 11:31:18