<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Am 03.09.2010 08:22, schrieb Martin Buchholz:
    <blockquote
      cite="mid:AANLkTikrDTV4h7y+ApnPW9X--RZX3M8OU03esnHFBpkY@mail.gmail.com"
      type="cite"><br>
      <br>
      <div class="gmail_quote">On Thu, Sep 2, 2010 at 17:50, Joe Darcy <span
          dir="ltr"><<a moz-do-not-send="true"
            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>
    </blockquote>
    <br>
    Oops, my English :-(<br>
    I interpreted your term "...as with generics, which is not the case
    here." as such reification.<br>
    <br>
    <blockquote
      cite="mid:AANLkTikrDTV4h7y+ApnPW9X--RZX3M8OU03esnHFBpkY@mail.gmail.com"
      type="cite">
      <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>
    </blockquote>
    <br>
    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:<br>
    "...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"<br>
    <br>
    -Ulf<br>
    <br>
  </body>
</html>