Sto imparando Java Generics di recente, e sto solo provando ad andare con "Java Generics FAQ".Java Generics Wildcard confusione
La seguente domanda (n. 304) relativa al tipo di parametro con caratteri jolly kinda mi ha confuso, apprezzerebbe il vostro aiuto.
Esempio di codice:
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
}
}
non riesce a capire il motivo per cui qui di seguito due metodo chiamato fallirà:
boolean equal = box.equalTo(box);
equal = box.equalTo(new Box<String>("abc"));
Grazie
Cosa dice l'errore e cosa non capisci a riguardo? –
@SotiriosDelimanolis ha appena pensato che il parametro per equalTo() sarà Box > e non capisco perché Box > non possa accettare "box" e "nuova casella (" abc ")" come argomento. –
foolhunger
Quando dici errore, intendi errore del compilatore o errore di runtime? – smac89