Podczas czytania oficjalnego samouczka języka Java na temat generycznych odkryłem, że można ograniczyć argument typu (w tym przypadku to T
) w celu rozszerzenia klasy i/lub większej liczby interfejsów za pomocą operatora "i" (&
) w następujący sposób:Jaka jest różnica między "&" a "," w generycznych Java?
<T extends MyClass & Serializable>
Wymieniłem &
na ,
(przez pomyłkę i nadal działa, z niewielkim ostrzeżeniem).
Moje pytanie brzmi, czy istnieje jakaś różnica między tymi dwoma:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
A metoda przykład:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
@Doorknob zakładasz, że OP używa klawiatury i tej samej klawiatury, z której korzystasz. – emory
Samouczek Myślę, że nawet to jest złe kierunek - błąd nie był w jego palcach, ale w jego mózgu. Podobnie, jakbyś próbował użyć "include" zamiast "importu" w źródłowym pliku Java. Błędnie wpisałeś "uwzględnij", ponieważ twój mózg kazał ci wpisać niewłaściwą rzecz, która jest możliwa z różnych powodów. –
@Nicholas Pickering, ma rację! Dla mnie to nie była pomyłka z powodu klawiatury, ale z powodu mózgu. Kiedy piszesz, które interfejsy implementuje klasa, oddzielasz je przecinkami. –