Sto leggendo "Generics in Java Programming Language" di Gilad Bracha e sono confuso riguardo uno stile di dichiarazione. Il seguente codice si trova a pagina 8:Qualcuno può spiegare la dichiarazione di questi metodi generici 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!
}
Il mio punto di confusione deriva dalla seconda dichiarazione. Non è chiaro per me quale sia lo scopo della dichiarazione <T>
serve nella seguente riga:
public <T> boolean containsAll(Collection<T> c);
Il metodo è già un tipo (booleano) ad esso associati.
Perché utilizzare lo <T>
e cosa indica al compilatore?
Penso che la mia domanda debba essere un po 'più specifica.
Perché si scrivere:
public <T> boolean containsAll(Collection<T> c);
vs
public boolean containsAll(Collection<T> c);
Non è chiaro per me, quale sia lo scopo di <T>
è, nella prima dichiarazione di containsAll.
Se capisci il PECS, allora capirai questi. Controlla qui http://stackoverflow.com/questions/4535930/regarding-pecs-java-generics –
In Oracle/Sun JDK 6, viene utilizzato il primo esempio, quindi non so che useresti anche il secondo. –
E perché è meglio di 'public boolean containsAll (Collection > c);'? –