São mecanismos para criação de tipos parametrizados.
Classes e métodos podem funcionar com uma variedade de tipos
Utilização casting ao se obter os dados de uma lista com multiplos tipos,possibilitando erros de conversão.
public static void main(String[] args){
List lista = new ArrayList();
lista.add(new Integer(0));
lista.add("1");
lista.add(new Integer(2));
Integer i1 = (Integer) lista.get(0);
//Erro:String cannot be cast to Integer
Integer i2 = (Integer) lista.get(1);
}
Com o uso de genéricos estes problemas seriam facilmente resolvidos.
public static void main(String[] args){
ArrayList<Integer> lista = new ArrayList<Integer>();
lista.add(new Integer(0));
lista.add("1"); //erro de compilação
lista.add(new Integer(2));
Integer i1 = lista.get(0);
Integer i2 = lista.get(1);
}
Criando uma classe genérica
public class NomeClasse<T>{
}
Atributo Genérico
private T valor;
Getters e Setters Genéricos
public void setValor(T valor){
this.valor = valor;
}
public T getValor(){
return this.valor;
}
public <T extends Superficie> double calculaArea(T[] formas) {
double total = 0.0;
for(Superficie object : formas) {
total += object.area();
}
return total;
}
public Number teste(Inteiro<T extends Number> valor){
return valor*4
}