momento abbiamo una classe che non compilare con openjdk 6. Il seguente classe abbreviato riproduce questo errore:Generics problema - dedurre tipo non conforme alla dichiarata vincolato (s)
public class Copy implements ICopy {
public <A,B extends List<A>,C extends Map<A,B>> A method(A a, B b) {
A something = null;
return something;
}
@Override
public <A,B extends List<A>> A method2(A a, B b) {
return method(a,b);
}
}
L'interfaccia è semplice ma mostrano solamente, che non possiamo cambiare la firma del method2
:
public interface ICopy {
public <A,B extends List<A>> A method2(A a, B b);
}
compila con le versioni oracoli Java e OpenJDK 7 - ma fallisce con OpenJDK 6, e, purtroppo, questa è la versione che abbiamo da usare per compilare il codice (originale).
Il messaggio di errore è
Copy.java:15: invalid inferred types for C; inferred type does not conform to declared bound(s)
inferred: java.util.Map<A,B>
bound(s): java.util.Map<A,B>
return method(a,b);
^
Tutto quello che serve sono alcune idee su come modificare l'implementazione di method2
in modo che fosse la compilazione. Non avrei nemmeno preoccuparsi di avvisi del compilatore ...
sembra un insetto. Il compilatore di Eclipse e il compilatore di Sun non dicono nulla al riguardo. –
@GuillaumePolet - un bug o una gestione eccessivamente rigida di tipi generici di quella versione java. E, sì, eclipse non si lamenta (il che ha reso piuttosto complicato riprodurre questo brutto errore che uccide la build). –