When you are first introduced to Generics in Java 5, it seems pretty simple (especially if you already know C++ templates) and you wonder how the language ever made it through four previous versions without having this wonderful feature. Then you encounter the mysterious “? extends” syntax, and suddenly things don’t seem too simple anymore. After a while, you understand the concept, and then it becomes simple again.
I’m pretty sure I have reached the third stage by now, so I wrote a little article about it. It’s not the first one, probably not even the best one, but this one is mine.