DefaultMethods
From APIDesign
DefaultMethods is a new feature in JDK8 which breaks the clear separation between Java interface (only specifies a contract) and class (provides some implementation). Many members of the Java community were crying for having a way to add methods into interface in a backward compatible way for ages. Of course, as usual inJava, only when the JDK team felt the need itself (because of adding a lot of new methods into Collection & co. classes), it listen to the general request.
On the other hand, there were people claiming that DefaultMethods are bad - that an interface should be a code-less specification and the change will have consequences. Here is one.
By-Passing Your Interface
When I was implementing Html4Java API, I had to create an observable list - so I did it and created JSONList. I've carefully overwritten each public method that modified the list state and called a change notification handler. What can be the problem?
@Override public boolean add(T e) { boolean ret = super.add(e); notifyChange(); return ret; }
I thought I did everything correctly, as all the methods of the List interface are properly overwritten. But of course, the problem appeared with DefaultMethods.