Re: Is clone a member function for array types?
tam@milkyway.gsfc.nasa.gov wrote:
On Dec 3, 12:22 pm, Roedy Green <see_webs...@mindprod.com.invalid>
wrote:
On Mon, 3 Dec 2007 08:02:51 -0800 (PST), t...@milkyway.gsfc.nasa.gov
wrote, quoted or indirectly quoted someone who said :
Does anyone have any idea what I'm missing?
My guess is arrays are handled as a special case. For example you can
iterate over them with for:each even though they don't implement
Iterable.
--
Roedy Green Canadian Mind Products
The Java Glossaryhttp://mindprod.com
You're right! I've looked more carefully at the JavaDocs and I see
that you're right and the description for getMethods explicitly
mentions that only the
methods inherited from Object are returned:
"Array classes return all the (public) member methods inherited from
the Object class."
Not sure how I missed that in my first read through, but I should have
been more careful when posting. It's still a bit of a gotcha, but my
apologies for misleading anyone that it is not consistent with the
documentation.
I see that the discussion of getFields similarly talks in detail about
not handling the length attribute that Patricia talks about elsewhere
in this thread.
This came up in a routine that was trying to do a generic clone. I
was checking that an object implemented Cloneable and had a public
clone method reflectively, It looks like I need to check for arrays
explicitly also.
Regards,
Tom McGlynn
Not to mention Arrays are a special case anyway.
I believe that if you clone a multi-dimensional array, you in fact only
clone the left-most dimension, and therefor have shared elements.
Not to mention that performance wise, .clone on arrays(in currently
implementations) tends to be slower than creating a new array and using
System.arrayCopy. Also, in Java 6 java.util.Arrays has some very nice
methods for copying and resizing arrays. No deep copy though :-(
Why, may I ask, are you trying to create a generic clone? What problem
will be solved by it? Its been my experience that using reflection
should be a last resort, or used only in framework libraries/APIs.
--
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>