Scope modifiers in interfaces [was Default methods on Map]
david.holmes at oracle.com
Tue Apr 9 11:57:42 UTC 2013
On 9/04/2013 7:53 PM, Stephen Colebourne wrote:
> As far as I can tell, there are three different styles being used for
> "public" modifiers in interfaces now:
> 1) no use of "public"
> 2) use of "public" only on default methods
> 3) use of "pubilc" on default and abstract methods
> (I can't recall seeing any static methods on interfaces outside of JSR-310 yet)
> Type 1:
> Type 2:
> Type 3:
All of the lambda-related work has now moved (or is moving) to #1. No
public on interface methods as has been the recommendation since day one.
> I find this inconsistency troubling. Its time for a firm
> recommendation to be made as to Oracle's preferred coding standard.
I agree because I see that java.time is using #2.
> I'm of the opinion that moving code to #3, explicit use of "public"
> will serve Java better in the long run. I find #1 particularly
> troubling, as it means a default method (which looks very like a
> normal method) looks like it is package scoped when I read the source
If/when non-public methods are allowed in interfaces then we should
probably make things explicit, in my opinion. I don't find anything
troubling about not having public of interface methods - default or
> (this affects the Map changes webrev)
> On 8 April 2013 19:07, Mike Duigou <mike.duigou at oracle.com> wrote:
>> Hello all;
>> This is a combined review for the new default methods on the java.util.Map interface being added for the JSR-335 lambda libraries. The reviews are being combined because they share a common unit test.
>> 8004518: Add in-place operations to Map
>> 8010122: Add atomic operations to Map
>> putIfAbsent() *
>> remove(K, V)
>> replace(K, V)
>> replace(K, V, V)
>> compute() *
>> merge() *
>> computeIfAbsent() *
>> computeIfPresent() *
>> The * operations treat null values as being absent. (ie. the same as there being no mapping for the specified key).
>> The default implementations provided in Map are overridden in HashMap for performance purposes, in Hashtable for atomicity and performance purposes and in Collections for atomicity.
More information about the core-libs-dev