Default method survey results

Alex Blewitt alex.blewitt at gmail.com
Mon Aug 13 10:40:07 PDT 2012


By that argument, the keyword 'abstract' should be required for all interfaces. Yet it is not, on the observation that all interfaces are abstract. By similarity, every non-abstract method in an interface will be 'default' and yet that keyword will not be optional.

Alex

On 13 Aug 2012, at 17:39, Ezequiel Mario wrote:

> Just trying to give a constructive view:
> 
> 
> I think the keyword is a good approach, as Maurizio said it says loud and
> clear what it is, as when you read “public abstract class …” or “public
> abstract void foo()”. Even though the compiler can handle the syntax
> without the keyword, one could argue the same for the abstract keyword,
> right?. The main line seems to be not whether the compiler can easily
> handle the syntax, but whether the human reading it can do it as easily as
> without it?
> 
> 
> Also I think that, since right now you express your intent of not providing
> an implementation in a class for a method as “public abstract void foo();”,
> it seems perfectly reasonable to express in an interface your intention of
> providing one that is default “somewhat” in a similar syntax “public
> default foo() {}”; maintaining “in my view” homogeneity between both
> declarations.
> 
> 
> Keep up the good work!
> 
> 
> On Mon, Aug 13, 2012 at 11:47 AM, Yuval Shavit <yshavit at akiban.com> wrote:
> 
>> There have been discussions within the last few days, on this mailing list,
>> about how people wish that Java had a keyword for package-private
>> visibility. Insofar as we should learn from the past, this seems to me a
>> nudge towards the direction of having one for defenders. That said, my
>> argument for where to place the "default" keyword (assuming there is one)
>> can also back the no-keyword camp.
>> 
>> I agree with the survey's description of what "default" would mean in each
>> place. But I voted in the minority, exactly because to me, the concept of a
>> "default method" is not very useful.
>> 
>> As a user of an interface with such a method, I don't care if it has a
>> default implementation -- I just care that it has some implementation. As
>> an implementer of such an interface, I don't care what "kind" of method it
>> is as much as whether I need to implement it; many times I'll be
>> implementing it via an abstract class like AbstractList, anyway, so default
>> methods are not the only ones for which I don't need to provide an
>> implementation. Or do I need to switch my mindset, such that if
>> AbstractList provides an implementation of iterator(), that is now a
>> "pseudo-default" method from my perspective? And as the interface writer, I
>> don't even really care about the fact that it has a default implementation
>> (unless final defaults come in later). I only care that the method exists
>> at all.
>> 
>> In other words, what does the concept of a "default method" add to how
>> anybody thinks about the interface?
>> 
>> With abstract methods, I always viewed the "abstract" keyword as a
>> confirmation to the compiler: "my semicolon isn't a typo -- this is really
>> a pure virtual function." I would view the "default" keyword the same way,
>> and in that context it seems to fit well between the signature and the
>> body.
>> 
>> On Mon, Aug 13, 2012 at 10:25 AM, Collin Fagan <collin.fagan at gmail.com
>>> wrote:
>> 
>>> As much as developers would like them to be, and as much as modern
>>> frameworks treat them as such, annotations are not keywords.  Annotations
>>> were intended only to add information and not to actually change the
>>> meaning of anything in the language. Frameworks can blur the lines if
>> they
>>> wish but I think the Java language itself should not break it's own rules
>>> for this one case.
>>> 
>>> Collin
>>> 
>>> On Mon, Aug 13, 2012 at 9:09 AM, Jose A. Illescas <
>>> jantonio.illescas at rbc.com
>>>> wrote:
>>> 
>>>> Gregg,
>>>> 
>>>>   Compiler can add "default" keyword for every method (on interface)
>>>> with implementation (delimiteded with "{...}" instead of "default")
>>>> 
>>>>   Demarcations on developer hands are ugly, (I think) must be resolved
>>>> by compiler...
>>>> 
>>>> 
>>>> On 13/08/2012 15:52, Gregg Wonderly wrote:
>>>>> In this day and age of the Java language, reusing existing keywords,
>>>>> trying to shoehorn them into use for a new purpose, can feel a little
>>>>> clumsy.  Annotations can provide a much better mechanism in many
>>>>> cases, simply because the right nomenclature is helpful.
>>>>> 
>>>>> However, annotations also have a very specific usage scenario with
>>>>> tooling and moment-of-use issues.  For me, this means that you can't
>>>>> use annotations in places that annotations wouldn't work with the
>>>>> normal annotation tooling.  You certainly don't want to have to have
>> a
>>>>> special class of annotation that further confuses the use of
>>>>> annotations in other cases.
>>>>> 
>>>>> The use of "default" isn't awesome, but it does provide a usable
>>>>> demarcation which the compiler and run-time class loading can use to
>>>>> make the right decision for how to build the v-tables to dispatch the
>>>>> default method should it be involved some how.
>>>>> 
>>>>> Gregg Wonderly
>>>>> 
>>>>> On 8/13/2012 8:35 AM, Jose A. Illescas wrote:
>>>>>> On 13/08/2012 15:23, Deepak S Patwardhan wrote:
>>>>>>>> -----Original Message-----
>>>>>>>> From: lambda-dev-bounces at openjdk.java.net [mailto:lambda-dev-
>>>>>>>> bounces at openjdk.java.net] On Behalf Of Jose A. Illescas
>>>>>>>> Sent: 13 August 2012 16:40
>>>>>>>> To: Brian Goetz
>>>>>>>> Cc: lambda-dev at openjdk.java.net
>>>>>>>> Subject: Re: Default method survey results
>>>>>>>> 
>>>>>>>> Brian, Why not add one thirth option (without "default" keyword)
>> to
>>>>>>>> poll?
>>>>>>>> 
>>>>>>>> 1.  void foo() default {
>>>>>>>>            System.out.println("foo");
>>>>>>>>        }
>>>>>>>> 
>>>>>>>> 2.  default void foo() {
>>>>>>>>            System.out.println("foo");
>>>>>>>>        }
>>>>>>>> 
>>>>>>>> 3.     void foo() {
>>>>>>>> 
>>>>>>>>            System.out.println("foo");
>>>>>>>>        }
>>>>>>>> 
>>>>>>> If we explore going down this path, I think we should also explore
>>>>>>> using an
>>>>>>> annotation,
>>>>>>> 
>>>>>>> @java.lang.Default
>>>>>>> void foo() {
>>>>>>>      System.out.println("foo");
>>>>>>> }
>>>>>>> 
>>>>>> Deepak, why proposed annotation?
>>>>>> 
>>>>>>      I would like see an implementation as any other java method
>>>>>> (without new keywords, annotations, ...)
>>>>>> 
>>>>>>      Implements a interface method ("default") must be equals to
>>>>>> implement another class method (I want "complexity" out of developer
>>>>>> hands, into compiler...)
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> I would be interested in knowing if using such an annotation has
>> any
>>>>>>> demerits.
>>>>>>> 
>>>>>>> Regards,
>>>>>>> Deepak S Patwardhan.
>>>>>>> 
>>>>>>>> 
>>>>>>>> On 12/08/2012 00:30, Brian Goetz wrote:
>>>>>>>>> Poll is closed, and results can be seen here:
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> https://www.surveymonkey.com/sr.aspx?sm=xPw4AxfWK2TTQLQtbIpQCg0l
>>>>>>>> bkw_2fuYDiZnrBDB_2bPyd4_3d
>>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 



More information about the lambda-dev mailing list