Я читаю "Generics in the Java Programming Language" Гилада Брачи и не понимаю стиль объявления. Следующий код находится на странице 8:
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!
}
Меня смущает второе заявление. Мне непонятно, для чего служит объявление <T> в следующей строке:
public <T> boolean containsAll(Collection<T> c);
Метод уже имеет связанный с ним тип (логический).
Зачем вам использовать <T> и что он сообщает компилятору?
Я думаю, что мой вопрос должен быть немного более конкретным.
Почему вы пишете:
public <T> boolean containsAll(Collection<T> c);
vs
public boolean containsAll(Collection<T> c);
Мне непонятно, какова цель <T> в первом объявлении containsAll.
public boolean containsAll(Collection<?> c);? - person Mark Peters   schedule 14.01.2011