Generic の↓の違いはなに?

ArrayList<String> list1 = new ArrayList();
ArrayList list2 = new ArrayList<String>();
ArrayList<String> list3 = new ArrayList<String>();

個人的に cast が減ることよりも <String> って書く方が EoD から遠い