Request for review: proposal for @FunctionalInterface checking

Joe Darcy joe.darcy at oracle.com
Fri Dec 28 13:38:57 PST 2012


Hi Sam,

On 12/28/2012 12:28 PM, Sam Pullara wrote:
> On Dec 28, 2012, at 3:02 PM, Joe Darcy <joe.darcy at oracle.com 
> <mailto:joe.darcy at oracle.com>> wrote:
>> has exactly one abstract method.  Since default methods are not 
>> abstract, any default methods declared in an interface do not 
>> contribute to its abstract method count.  If an interface declares a 
>> method overriding one of the public methods of java.lang.Object, that 
>> also does <em>not</em> count toward the abstract method count.
>
> This is pretty murky. This works:
>
> interface Foo {
>   @Override
>   boolean equals(Object other);
> }
>
> but if you try this
>
> interface Foo {
>   @Override
>   default boolean equals(Object other) {
>     return false;
>   }
> }
>
> it does give an error that says I can't override:
>
> *java: default method equals in interface spullara.Foo overrides a 
> member of java.lang.Object*
>
> Seems like "override" is the wrong word to use and will likely be 
> confusing since we are explicitly disallowing the second one.
>
>

Yes, I was contemplating whether "override" was the best phrasing to use 
in the wording above because of this sort of wrinkle.  Instead 
"*abstract* method overriding one of the ..." might help distinguish 
this particular case.

-Joe


More information about the lambda-libs-spec-observers mailing list