Ho definito la seguente classe generica, ma quando la uso sull'oggetto classe non viene compilata. Il costruttore non avrebbe accettato un altro oggettoDiamante Non compilato Java 7
class Pair<T,V> {
T one;
V two;
public Pair(T one, V two) {
this.one = one;
this.two = two;
}
}
public static void main(String[] args) {
String hamza = "Hamza";
Integer soufiane = 0;
Pair<Object,Object> pairOne = new Pair<>(hamza, soufiane);
Pair<Object,Object> pairTwo = new Pair<Object, Object>(soufiane, hamza);
}
Messaggio di errore:
incompatible types: Pair<String,Integer> cannot be converted to Pair<Object,Object>
Perché il primo non compilare e la seconda di compilazione?
EDIT: E ' compilato su Java 8
È piuttosto raro che qualcosa non si compili e il compilatore non ti dica _why_ che non viene compilato. – Tom
ho incluso il messaggio di errore lì! È la notazione del diamante e dovrebbe essere compilata, almeno per quanto ne so. Perché mi ha costretto a includere i parametri del modello è ciò che non capisco. –
Bene, i tipi generici non sono polimorfi, quindi assegnare 'Coppia' a 'Coppia ' non funziona e Java 7 pensa che dovrebbe essere 'Coppia ' perché tu ha detto che gli argomenti passati diranno il tipo. Java 8 d'altra parte è un po 'meglio con "trovare" il tipo generico corretto. –
Tom