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

Ulf Zibis Ulf.Zibis at gmx.de
Fri Sep 3 10:31:20 UTC 2010


  Am 03.09.2010 08:22, schrieb Martin Buchholz:
>
>
> On Thu, Sep 2, 2010 at 17:50, Joe Darcy <joe.darcy at oracle.com <mailto:joe.darcy at oracle.com>> wrote:
>
>     Martin Buchholz wrote:
>
>         The usage T[] suggests that T is a reference type, as with generics, which is not the case
>         here.
>
>         More precisely, both the runtime types and compiletime types of the object returned from
>         clone of any array is identical to its input.
>         Is there a non-confusing way of saying that?
>
>
>     How about
>
>     "...and that the return type of the {@code clone} method of an array type {@code T[]} is
>     {@code T[]} where T is either a reference or a primitive type."?
>
>
> So I went and actually read the Object.clone spec, and it does indeed guarantee that the (runtime) 
> class of the returned value is the same as the class of the argument, for arrays.  As for the 
> compile-time type, an experiment demonstrates that the return type is indeed exactly the same, 
> including for non-reifiable array element types, e.g. this compiles:
>
>         Class<? extends Number>[] a
>             = (Class<? extends Number>[]) (new Class<?>[42]);
>         Class<? extends Number>[] clone = a.clone();
>
>
> So Ulf's restriction to non-reifiable T seems not to be correct.

Oops, my English :-(
I interpreted your term "...as with generics, which is not the case here." as such reification.

>
> My suggested wording is:
>
> "...and that the return type of the {@code clone} method of an array type {@code T[]} is {@code 
> T[]} where T is any reference or primitive type."
>
> Martin "Objects have class; Variables have type"

I think the question of variable types belongs to the spec, but here in Object class's javadoc we 
should speak about objects. So I now suggest:
"...and that the returned object of the {@code clone} method of an array object of class {@code T[]} 
is of class {@code T[]} where T is any [raw]? reference or primitive class. See java language 
specification version 3, section 6.4.5"

-Ulf

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20100903/2070db70/attachment.html>


More information about the core-libs-dev mailing list