j.u.Objects follow-up: deepEquals(Object, Object)?

Joseph D. Darcy Joe.Darcy at Sun.COM
Thu Oct 8 19:59:37 UTC 2009


Another piece of functionality requested in the j.u.Objects thread was a 
deepEquals(Object a, Object b.) method that "did the right thing" if the 
arguments happened to dynamically be arrays.

I've been thinking a bit how this might be implemented.

The array-ness of a and b would need to be determined, after any 
up-front null-checks

boolean aIsArray = a.getClass().isArray();
boolean bIsArray = b.getClass().isArray();

followed various case-analyses.

if (aIsArray && bIsArray) {
     Class<?> aComponentType = a.getClass().getComponentType();
     Class<?> bComponentType = b.getClass().getComponentType();
    if (aComponentType == bComponentType) {
        // long case analysis to cast and call Arrays.deepEquals if 
ComponentType is a reference type
        // or the matching Arrays.equals(primitiveComponent[], 
primitiveComponent[]) method if
        // aComponentType.isPrimitive().
    } else
        return false;
} else
    return a.equals(b);

Certainly a bit messy internally.

What are scenarios where this method would be used?

-Joe



More information about the core-libs-dev mailing list