Я читаю «Обобщения на языке программирования Java» Гилада Браха, и меня не может понять стиль объявления. Следующий код находится на странице 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!
}
Мое замешательство связано со вторым объявлением. Мне не ясно, для чего служит объявление
в следующей строке:
public <T> boolean containsAll(Collection<T> c);
У метода уже есть связанный с ним тип (логический).
Зачем использовать
и что он сообщает компилятору?
Думаю, мой вопрос должен быть более конкретным.
Почему вы пишете:
public <T> boolean containsAll(Collection<T> c);
vs
public boolean containsAll(Collection<T> c);
Мне не ясно, какова цель
, в первом объявлении containsAll.