<br><br><div class="gmail_quote">On Thu, Sep 2, 2010 at 17:50, Joe Darcy <span dir="ltr"><<a href="mailto:joe.darcy@oracle.com">joe.darcy@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">Martin Buchholz wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
The usage T[] suggests that T is a reference type, as with generics, which is not the case here.<br>
<br>
More precisely, both the runtime types and compiletime types of the object returned from clone of any array is identical to its input.<br>
Is there a non-confusing way of saying that?<br>
</blockquote>
<br></div>
How about<br>
<br>
"...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."?<br>
<br></blockquote><div><br>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:<br>
<br>        Class<? extends Number>[] a<br>            = (Class<? extends Number>[]) (new Class<?>[42]);<br>        Class<? extends Number>[] clone = a.clone();<br><br><br></div></div>So Ulf's restriction to non-reifiable T seems not to be correct.<br>
<br>My suggested wording is:<br><br>"...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."<br><br>Martin "Objects have class; Variables have type"<br>