Code review request for 4881419 The type of X[].clone() should be X[]

Joe Darcy joe.darcy at oracle.com
Tue Sep 7 16:15:18 UTC 2010


David Holmes wrote:
> Jeroen Frijters said the following on 09/07/10 17:59:
>> David Holmes wrote:
>>> The fact that Object.clone() is implemented via a native call into
>>> the VM is simply an implementation detail.
>>
>> That's not what we're talking about. We're talking about the fact
>> that arrays (appear to) have a *public* clone method. The argument is
>> about the return type[1] of this method: according to the JLS it is
>> X[], but according to the VMSpec it is Object. This difference is
>> fine, but I'm arguing that the JLS fiction should be in the JLS, not
>> in the Object.clone() documentation.
>
> I don't see where the VMSpec says anything about cloning ... but that 
> aisde. I hadn't realized that the JLS states that arrays override 
> Object.clone() rather than inheriting it - it would have been simpler 
> to cover the array and non-array cases in Object.clone().

Yes, as cited in my review request, the JLS does state the return type 
of clone called on an array:

    http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.4.5

and states that the array clone overrides Object.clone.

>
> As it stands there is no actual API doc in which to put this 
> information, so we really have no choice but to put it Object (having 
> it only in the JLS is inadequate). That said I would call it out 
> explicitly in its own paragraph, something like:
>
> "All array types, X[], are considered to implement Cloneable and to 
> override this method to return a new X[] containing the same elements 
> as the original."
>

I believe the revised text

    http://hg.openjdk.java.net/jdk7/tl/jdk/rev/a6c142240837

is more informative than the previous text and adequately covers this 
situation.

-Joe



More information about the core-libs-dev mailing list