我有兩個同構類型層次結構。第一個基本類型是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