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