[lambda-leftovers] Underscore parameter for abstract/native methods

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Sun Jul 30 10:41:43 UTC 2017

While I understand the point, overriding a method has never been about 
'inheriting' parameter names, so I'm also kind of hopeful that the 
confusion can be cleared up easily. I guess the fact that when you add 
an override through the IDE, the IDE already prepopulates your 
overriding declaration with parameter names from the overidden one might 
throw people of into thinking that there's some 'constraint' between 
names in the overriding vs. overridden. Of course there's not.


On 29/07/17 15:46, Brian Goetz wrote:
> As evidence of Tagir's point that people will confuse this for a 
> declaration-site feature, I offer this tweet of a random Java 
> developer who saw the blink-poll on twitter and immediately lept to 
> the wrong conclusion:
>     https://twitter.com/wbasrs/status/891213337454940160
> On 6/25/2017 6:51 AM, Tagir Valeev wrote:
>> Hello!
>> Currently in lambda-leftovers underscore is allowed as a parameter 
>> name for
>> abstract methods. This looks dubious as normally underscore means that
>> parameter is not used in the corresponding method/lambda/catch body, but
>> there's no actual body and no parameter is actually used anyways (but 
>> could
>> be used in abstract method implementations). I think, allowing 
>> underscores
>> for interface methods may encorage bad practices of defining interfaces
>> without readable parameter names:
>> interface X {
>>    void doSomething(int _, long _, String _);
>> }
>> Should not this be disabled?
>> It's even worse for native methods, because underscore assumes that
>> parameter is not used, but it does not limit the corresponding native
>> implementation from using it.
>> With best regards,
>> Tagir Valeev.

More information about the amber-dev mailing list