Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Osservazioni
Non e' difficile trovare una similitudine tra:
il concetto di parametro formale/attuale inerente l'invocazione dei
metodi
il concetto di tipo formale/attuale inerente la tipizzazione di classi
generiche.
Metodi generici
E' possibile definire anche metodi generici (cioe' parametrici rispetto ad un
tipo).
Un metodo generico definisce i parametri (formali) di tipo nella segnatura
del metodo, prima del tipo di ritorno.
static <T> int mioMetodo(Coppia<T> c, T obj)
tmp = c.getPrimo();
c.setPrimo(c.getSecondo());
c.setSecondo(tmp);
}
}
Notazioni particolari
Esiste anche la possibilita' di utilizzare dei caratteri "jolly" per definire
situazioni particolari.
Prensiamo, ad esempio, l'interfaccia List<E> e analizziamo il metodo
addAll: deve aggiungere alla collezione tutti gli elementi di un'altra
collezione che viene passata come parametro.
Significa che lista e' un oggetto List istanziato su qualsiasi tipo (al quale
non e' necessario/utile associare un tipo formale con nome esplicito).
Esempio:
List<Strumento> strumenti;
List<Chitarra> chitarre;
...
Collections.reverse(chitarre);
Ancora dalla classe Collections, consideriamo il metodo fill(), che riempe gli
elementi della lista che viene passata come primo parametro, con un
oggetto, passato come secondo parametro:
static <T> void fill(List<? super T> list, T obj)
L'istruzione:
Collection<? extends T>
Volendo e' possibile incapsulare tutto in un metodo che ritorna un Set dello
stesso tipo generico di quello dell'insieme in input:
public static <E> Set<E> removeDups(Collection<E> c) {
return new LinkedHashSet<E>(c);
}