When I first started playing with Java 1.5, I thought generics were the best thing since sliced bread. No more untidy casting, lovely type-safe Collections, and when combined with the new for loop , a lot of the tedious tasks associated with Collections became easier and, most importantly, aesthetically pleasing. Consider the old code: List list = new ArrayList(); list.add(new Integer(1)); Integer integer = (Integer)list.get(0); for (Iterator i = list.iterator(); i.hasNext(); ) { Integer number = (Integer)i.next(); number.intValue(); } And the new: List<Integer> list = new ArrayList<Integer>(); list.add(new Integer(2)); Integer integer = list.get(0); for (Integer number : list) { number.intValue(); } See? Much prettier. OK so it's a silly little example but when you apply it to all the places you use things like Collections it does make life a lot easier, especially when you consider that now you *k...