2015-10-28 11 views
6

Zdefiniowałem następującą klasę ogólną, ale kiedy używam jej na obiekcie klasy, nie kompiluje się. Konstruktor nie zaakceptuje innego obiektuDiament Nie kompilując 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); 

} 

komunikat o błędzie:

incompatible types: Pair<String,Integer> cannot be converted to Pair<Object,Object> 

Dlaczego nie pierwsza kompilacji i drugi skompilować?

EDIT: ona opracowana na Java 8

+0

Dosyć rzadko zdarza się, że coś nie jest kompilowane, a kompilator nie mówi, dlaczego nie kompiluje się. – Tom

+1

Zawarłem tam komunikat o błędzie! Jest to notacja diamentowa i powinna się skompilować, przynajmniej według mojej wiedzy. Dlaczego to zmusiło mnie do uwzględnienia parametrów szablonu, jest tym, czego nie rozumiem. –

+3

Cóż, typy ogólne nie są polimorficzne, więc przypisywanie 'Pair ' do 'Pair ' nie działa, a Java 7 uważa, że ​​powinna to być 'Pair ' ponieważ powiedział przekazane argumenty powie typ. Z drugiej strony, Java 8 jest nieco lepsza w przypadku "znalezienia" właściwego rodzaju ogólnego. – Tom

Odpowiedz

3

Twój kod nie dlatego Java 7 kompilator nie może znaleźć odpowiedni typ wywnioskować; z drugiej strony java 8 będzie kompilować i działać poprawnie. (Tl; dr: JAVA 7 nie działa prawidłowo ze wszystkimi diamentami, współczynnik ten poprawił się Java 8)

JEP 101: Generalized Target-Type Inference

Płynnie rozszerzyć zakres sposobu typu wnioskowania wspierania (i) wnioskowanie w kontekście metody i (ii) wnioskowania w połączonych połączeniach.

Znaczenie java 8 będzie w stanie określić rodzaj połączenia za pomocą operatora diamentów.

EDIT: Wygląda na to, że ktoś pobił mnie do tej odpowiedzi w thread i wyjaśnił to jaśniej niż ja; więc spójrz!

Powiązane problemy