【发布时间】:2014-10-09 10:06:23
【问题描述】:
我有两个同构类型层次结构。第一个的基类型是 BaseA,第二个的基类型是 BaseB。我知道如何将 BaseB 的任何子类的任何对象转换为其对应的 BaseA 子类型。我想实现一个方法,该方法采用 BaseB 类型的对象确定其类并构造 BaseA 的相应子类型的对象。示例代码:
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
谁能解释我在泛型方面做错了什么?
【问题讨论】:
-
第一个答案可能对你有用stackoverflow.com/questions/16449799/…