Somebody had way too much time on his hands here:
Revenge of the <T>
It's pretty funny, though I do not agree with the negative message that generics are evil. If they were full blown C++ templates, I would have.
Even though I come from a Smalltalk background - a completely dynamically typed language - after years of doing Java I've become so used to type declarations that I am really beginning to hate the casting required to deal with collections. If you choose to make a language strongly typed, then do it right and all the way and make the collections typed as well... The generics in J2SE 5.0 accomplish this in as clean and compatible a way as possible. A good introduction to generics can be found
here. As an alternative, for a while now I've adopted the Eclipse API "pattern" of only using arrays in public interfaces and hide the collection classes in the internal implementation. That way the public API is always 100% typed and there are no surprises...