Mam na myśli "Generics in Java Programming Language" Gilada Brachy i nie mam pojęcia o stylu deklaracji. Poniższy kod znajduje się na stronie 8:Czy ktoś może wyjaśnić deklarację tych ogólnych metod java?
interface Collection<E>
{
public boolean containsAll(Collection<?> c);
public boolean addAll(Collection<? extends E> c);
}
interface Collection<E>
{
public <T> boolean containsAll(Collection<T> c);
public <T extends E> boolean addAll(Collection<T> c);
// hey, type variables can have bounds too!
}
Mój punkt widzenia wynika z drugiej deklaracji. To nie jest dla mnie jasne, jaki jest cel deklaracja <T>
służy w następującej linii:
public <T> boolean containsAll(Collection<T> c);
Metoda ma już typ (logiczna) z nim związane.
Po co używać <T>
i co mówi komplementowi?
Myślę, że moje pytanie musi być nieco bardziej szczegółowe.
Dlaczego piszesz:
public <T> boolean containsAll(Collection<T> c);
vs
public boolean containsAll(Collection<T> c);
To nie jest dla mnie jasne, jaki jest cel <T>
jest w pierwszej deklaracji containsAll.
Jeśli rozumiesz PECS, zrozumiesz to. Sprawdź tutaj http://stackoverflow.com/questions/4535930/regarding-pecs-java-generics –
W Oracle/Sun JDK 6 pierwszy przykład jest używany, więc nie wiem, czy używałbyś drugiego. –
I dlaczego jest lepszy niż 'public boolean containsAll (Collection > c);'? –