Hi Doug,
Thanks for the info, one query though ...
Doug Lea said the following on 05/22/09 21:08:
David Holmes - Sun Microsystems wrote:
Okay well the bug is still open. I think the original intent was to
change toArray() to match this, but I think it's far too late to
change that behaviour now. So the only "fix" is to delete that
sentence from the javadoc.
This bug is and its history are well-known to a few of us.
A fix once got vetoed in the approval process out of concern
that existing applications might rely on this incorrect behavior.
However, the bug causes all sorts of collateral damage. For
example, the ArrayList(Collection) constructor includes
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
Ummm why didn't it just use:
elementData = c.toArray(new Object[c.size()]);
??
David
It would be nice to know whether the number of collateral damage
bugs in existing applications is greater than the number of breakages
that would occur if this were fixed. This is not easy to estimate
though because only a few usages of "Object[] a = x.toArray()"
when toArray doesn't return Object[] are actually wrong.
-Doug
Were you looking for an actual change in the implementation?
Note this is just my opinion on this, I'm not a decision maker here :)
Cheers,
David