Ulf Zibis said the following on 04/27/11 19:41:
Am 27.04.2011 11:19, schrieb David Holmes:
Ulf Zibis said the following on 04/27/11 19:09:
Am 27.04.2011 02:34, schrieb David Holmes:

Actually my comments more a response to Remi's assertion that clone should have been used instead, without giving any technical rationale as to why clone would be better, and so much better that it warranted Lance changing the code.

Personally I think we should be steering people to Arrays.copyOf for all their array copying needs.
Hm, why?

One API to learn that covers all the array-copying needs.
Ok, but from the point of *object-copying* needs, why should one care about sophisticated array stuff?

All I'm saying is that when people think "I need a copy of this array" then copyOf is what should come to mind. Why learn two APIs just because one may handle a boundary case "better"?

clone() is effectively legacy code.
What does that mean?

Just that it is an old mechanism that has been around for a long time, is limited to one specific use-case and has been made somewhat redundant by the newer APIs.
Ok, you mean Array.copyOf() is clone() XL.
There are many places, where legacy code became redundant because of some extensions. Should we always avoid them? E.g.:
- StringBuilder.apend(...) instead '+'
- Objects.hashcode(obj) instead obj.hashcode()
- etc...

We should prefer them if they can do an overall better job - else why bother adding them. Why teach the old way when there is a more advanced/useful new way? Why learn two things when you can learn one that covers both use-cases? Sometimes there is a need for both - it isn't an absolute.

I prefer clone():
- less to type
- better to read, especially in looong code lines, e.g. as method call argument

True. Would be nice if defender methods were expanded to allow you to do anArray.copyOf()
Can you explain that in other words. Sorry, I'm no english native ;-)

You argued, quite correctly, that anArray.clone() is easier to read in some contexts, compared to Arrays.copyOf(anArray, anArray.length). I was saying that it is a pity that the defender method mechanism (for adding new methods to interfaces -coming in Java 8) wasn't extended so that you could also add methods to arrays - if it were then you could write anArray.copyOf()

Anyway I'm not interested in convincing anybody either way. What I objected to originally was the assertion that copyOf should be replaced by clone() with no technical justification as to why.

David

-Ulf

Reply via email to