Java typu rodzajowego: Jaka jest różnica międzyJava Typ ogólny: różnica między listą <? rozciąga numer> i List <T rozciąga Number>
(1) List <? extends Number>
(2) List <T extends Number>
jak na moje rozumienie
(1) List <? extends Number>
jest Readonly Lista "nieznany" danych wpisz z super klasy "Liczba". możemy odczytać tylko ten element, ale nie można dodać:
(2) List <T extends Number>
Lista typu danych z super klasą "Liczba". możemy czytać i dodawać elementy do listy
Proszę patrz poniższy przykład kodu
class TestGen{
public static void main(String[] args) {
double result = 0.0;
List<Integer> intList = new ArrayList<Integer>();
intList.add(10);
intList.add(20);
intList.add(30);
result = TestGen.sumOfList1(intList);
System.out.println("Result=" + result);
result = TestGen.sumOfList2(intList);
System.out.println("Result=" + result);
}
public static double sumOfList1(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static <T extends Number> double sumOfList2(List<T> list) {
double s = 0.0;
// -- ---------------------------------------------------------
// getting error while trying to add new element
// list<T> is not applicable for argument(Integer) : Why ?
list.add(new Integer(40));
for (Number n : list)
s += n.doubleValue();
return s;
}
}
Gdy próbuję dodać Integer (lub nawet obiekt Number) do sumOfList2 następnie uzyskiwanie błąd . Proszę wyjaśnić, co jest nie tak?
Dlaczego została odrzucona, jakaś wskazówka? Czy coś jest nie tak? – BVMR
Nie jestem pewien, kto głosował .... to rozwiązanie działa, czy możesz rzucić światło, dlaczego wymagane jest odlewanie. list.add ((T) new Integer (40)); podczas gdy dodajemy obiekt tylko klasy podrzędnej (Integer jest podklasą liczby) –
Zgaduję, że daje ci ostrzeżenie typu "typ bezpieczeństwa", gdy rzucisz go na 'T'. – GGrec