Кто-нибудь может объяснить объявление этих универсальных методов Java?

Я читаю «Обобщения на языке программирования 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.

9
задан Jonathan Leffler 27 May 2015 в 17:50
поделиться