Reading through the new JDK 5.0 documentation, I found this piece of gem:
In DOM level 3, additional methods were defined in the following
interfaces:
Attr
Document
DOMImplementation
Element
Entity
Node
Text
The added methods only affect applications that implement the interfaces directly, and only then when the application is recompiled. Applications that use the factory methods to obtain implementation classes for these interfaces will have no problems.
After years of yelling at people "Don't ever change your interfaces, you will break other peoples code," I feel pretty annoyed by this.
True, 5.0 is a compatibility breaking upgrade (if you have ever written code like Enumeration enum = myVector.elements(); back in the 1.1.4 days), but adding public methods to interfaces is a crime much more severe.
Even in the old 1.1.x days people know to introduce new and improved interfaces with a different name: LayoutManager2 vs. LayoutManager.
On a practical level, this means that even after I have upgraded to JDK 5.0, I have to keep a copy of JDK 1.4.2_05 around just to compile old code that implements the narrower interfaces, until everybody in the world have patched their code for 5.0!