genişletir İki izomorfik hiyerarşim var. Birincisinin taban tipi BaseA ve ikincisinin baz tipi BaseB'dir. BaseB'nin herhangi bir alt sınıfının herhangi bir nesnesini BaseA'nın ilgili alt türüne nasıl dönüştüreceğini biliyorum. BaseB türünü nesneyi alan bir yöntemi uygulamak istiyorum ve sınıfını belirler ve BaseA'nın ilgili alt türünün bir nesnesini oluşturur. Örnek kod:Java jenerik: <B BaseB> uzantıları eşleşmiyor <? 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
}
Neden <B extends BaseB>
<? extends BaseB>
ile uyumlu değildir? Transform<A,B> cannot be applied to given types
kimse ben Generics yanlış yapıyorum bana açıklayabilir:
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
}
Bir derleme hatası alıyorum: Böyle statik dönüşümü yöntemi uygulamayı deneyin Ayrıca olur?
İlk cevap size http://stackoverflow.com/questions/16449799/how-do-generics-of-generics-work – aalku