Was ist der Sinn von Generics und Wie werden Sie verwendet?

Mit generischen Typen ist in Java:

List <JButton> list = new ArrayList<>();
list.add(new JButton("Button1"));
list.add(new JButton("Button2"));

for(JButton button: list){
     button.setBackground(Color.white);

}

die ArrayList auf den Typ Objekt fixiert.

List list =new new ArrayList();
list.add(new JButton("Button1"));
list.add(new JButton("Button2"));

for (int i=0; i<list.size(); i++){
     JButton button = (JButton) list.get(i);
     button.setBackground(Color.white);
}