rozważyć tę klasę Java:Jak skopiować rodzajowe kolekcji w Javie przy użyciu symboli wieloznacznych
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
public class NumberSet {
private Collection<? extends Number> numbers;
public NumberSet(Collection<? extends Number> numbers) {
this.numbers = numbers;
}
public NumberSet(NumberSet other) {
//copy other.numbers to this.numbers
numbers = new LinkedList<>();
for (Iterator<? extends Number> it = other.numbers.iterator(); it.hasNext();) {
numbers.add(it.next()); // Here's Syntax Error near `it.next()`
}
}
}
nie jest to błąd składni wewnątrz for
pętli:
actual argument Number cannot be converted to CAP#1 by method invocation conversion
where E is a type-variable:
E extends Object declared in interface Collection
where CAP#1 is a fresh type-variable:
CAP#1 extends Number from capture of ? extends Number
Rozumiem sens PECS
ale I chcesz zaimplementować konstruktora kopii dla tej klasy. skopiowana instancja byłaby używana tak jak migawka z other
. dowolny pomysł?
@BrianAgnew I naprawdę nie rozumiem, jak można oznaczyć pytanie jako duplikat 'Co jest PECS'? Gdyby ktoś znał termin "PECS", w pierwszej kolejności nie zadałby pytania. – CKing
Ponownie otworzyłem go, ponieważ zgadzam się z tobą. Myślę, że pytanie/odpowiedź PECS rozwiązuje ten problem, ale całkowicie podjąłem decyzję: –
@BrianAgnew Dziękuję za ponowne otwarcie pytania. Edytuję tytuł, aby był bardziej dostępny. – CKing