Niedawno uczę się języka Java Generics, a po prostu próbuję przejść przez "Java Generics FAQ".Java Generics Wildcard zamieszanie
Poniżej pytanie (# 304) dotyczące typu z parametryzacją typu wildcard, wprawiło mnie w zakłopotanie, doceniłbym Twoją pomoc.
Kod Przykład:
class Box<T> {
private T t;
public Box(T t) { this.t = t; }
public void put(T t) { this.t = t;}
public T take() { return t; }
public boolean equalTo(Box<T> other) { return this.t.equals(other.t); }
public Box<T> copy() { return new Box<T>(t); }
}
class Test {
public static void main(String[] args) {
Box<?> box = new Box<String>("abc");
box.put("xyz"); // error
box.put(null); // ok
String s = box.take(); // error
Object o = box.take(); // ok
boolean equal = box.equalTo(box); // error {confused}
equal = box.equalTo(new Box<String>("abc")); // error {confused}
Box<?> box1 = box.copy(); // ok
Box<String> box2 = box.copy(); // error
}
}
nie może dowiedzieć się, dlaczego poniżej dwie metody zwanej zawiedzie:
boolean equal = box.equalTo(box);
equal = box.equalTo(new Box<String>("abc"));
Dzięki
Co mówi błąd i czego nie rozumiesz? –
@SotiriosDelimanol jest po prostu pomyślałem, że parametr dla equalTo() będzie Box > i nie rozumiem, dlaczego Box > nie może przyjąć "box" i "new Box (" abc ")" jako argument. –
foolhunger
Kiedy mówisz o błędzie, masz na myśli błąd kompilatora lub błąd środowiska wykonawczego? – smac89