Generics
Java Collections - Generics
Generics é uma funcionalidade incorporada ao Java a partir da versão 5.0, permitindo aos programadores escreverem métodos genéricos. Os parâmetros dos métodos, variáveis locais e o tipo de retorno podem ser definidos na chamada do método e possibilita ao mesmo método ser invocado usando-se tipos distintos (sem precisar sobrescrevê-lo). Permite também a definição de classes genéricas onde os atributos da classe podem ser definidos no momento da instanciação do objeto. Generics em Java oferece os mesmos recursos dos Templates em C++.

Quais são os benefícios quando se utiliza o recurso de generics em uma coleção?
- Segurança que os elementos adicionados serão sempre do mesmo do tipo
 - Garantia que os elementos que serão obtidos também serão do mesmo
 - Evita criar sobrecarga de métodos para atender a variação dos possíveis tipos de elementos
 
Conforme imagem abaixo, iremos ilustrar a aplicabilidade de generics em uma fábrica que confecciona engradados de refrigerante.

import java.util.ArrayList;
import java.util.List;
public class SemGenerics {
    public static void main(String[] args) {
        List engradado01 = new ArrayList();
        engradado01.add(new CocaCola());
        engradado01.add(new FantaLaranja());
        for(Object item: engradado01){
            System.out.println("Este item é uma coca-cola ou fanta laranja? " + item.getClass().getSimpleName());
        }
    }
}
class CocaCola{ }
class FantaLaranja{}