Updated State of the Lambda

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Dec 12 03:46:16 PST 2011


On 12/12/11 11:21, Stephen Colebourne wrote:
> At this point, I find the "default" keyword in default method
> interfaces to be noise, and adding no value. Method bodies in
> interfaces is not a complex concept, nor an unreadable one. The
> default keyword makes it more complex and noisy, not less. Removing
> "default" would also mean removing "default none", which again makes
> perfect sense. Redclaring a method in a subinterface for documentation
> purposes is rare, and for classes requires a call to super, so the
> same should apply for interfaces.
>
Note that the presence of 'default none' is not accidental, nor driven 
by a syntax decision. An extension method whose body is 'default none' 
is used to explicitly get rid of any defender that might have been 
inherited up to that point. It is the equivalent of re-abstraction of 
concrete methods, but applied to extension methods. We feel like we need 
an explicit re-abstraction mechanism, as it is quite common in Java code 
to repeat an interface method declaration is a sub-interface just for 
documentation purposes. If the redeclaration was interpreted by the 
compiler as a re-abstraction we would be introducing subtle semantics 
change associated with such re-declaration of interface methods and the 
only way out for the developer would have been to re-specify the default 
implementation for the extension method (which would be the most common 
use case, as opposed to re-abstraction, which is quite rare).

Maurizio


More information about the lambda-dev mailing list