RFR: 8060130: Simplify the synchronization of defining and getting java.lang.Package

Remi Forax forax at univ-mlv.fr
Sat Oct 11 15:17:29 UTC 2014


Hi Mandy,

On 10/11/2014 02:31 AM, Mandy Chung wrote:

[...]

>
>>
>> webrev: http://cr.openjdk.java.net/~redestad/8060130/webrev.02/
>
> ClassLoader.java
> line 272: can you change the declared type as Map.

I think it's a bad idea, the class doesn't work if you replace the 
ConcurrentHashMap by any Map
so declaring the field 'packages' as a Map seems wrong to me.
At least, it should be a ConcurrentMap, but even with a ConcurrentMap, I 
think that the guarantee
that in definePackage the call to putIfAbstent is amortized O(1) and not 
something like O(ln n) is important.

Note that using interfaces instead of implementations is important in 
the signature of public or protected method,
for a local variable or a private field, which are hidden, there is no 
real reason to use an interface.
I understand that pedagogically having only one rule is appealing but 
from my own experience, this rule hide
one of the corner stone of the OOP, encapsulation, so IMO the rule 'use 
an interface everywhere you can'
does more harm than good because it offers a discorded version of the OO 
world.

cheers,
Rémi




More information about the core-libs-dev mailing list