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


Reply via email to