G
Guest
Gast
Hi,
kennt jemand von Euch einen kürzere Alternative
um Objekte unbestimmten Typs zu vergleichen?
Es geht mir speziell um die "primitiven" Typen,
die speziel gecastet werden müssen.
Wichtig ist mir dabei, dass der Vergleich kein "Garbage" produziert.
Die übergebenen Objekte sind jeweils vom gleichen Typ.
Gruß,
Michael
kennt jemand von Euch einen kürzere Alternative
um Objekte unbestimmten Typs zu vergleichen?
Es geht mir speziell um die "primitiven" Typen,
die speziel gecastet werden müssen.
Wichtig ist mir dabei, dass der Vergleich kein "Garbage" produziert.
Die übergebenen Objekte sind jeweils vom gleichen Typ.
Code:
private static boolean compare(Object a, Object b)
{
if(a == null)
return b==null;
if(b == null)
return false;
// Kein Array, dann normal equals
if(!a.getClass().isArray())
return a.equals(b);
else
{
// Sonst, wenn primitiver Typ
if(a.getClass().getComponentType().isPrimitive())
{
// a ist "primitive", b nicht, raus mit false
if(!b.getClass().getComponentType().isPrimitive())
return false;
if(a.getClass().getComponentType() == char.class)
return Arrays.equals((char[])a, (char[])b);
else if(a.getClass().getComponentType() == int.class)
return Arrays.equals((int[])a, (int[])b);
else if(a.getClass().getComponentType() == long.class)
return Arrays.equals((long[])a, (long[])b);
else if(a.getClass().getComponentType() == double.class)
return Arrays.equals((double[])a, (double[])b);
else if(a.getClass().getComponentType() == short.class)
return Arrays.equals((short[])a, (short[])b);
else if(a.getClass().getComponentType() == float.class)
return Arrays.equals((float[])a, (float[])b);
return false;
}
else
{
// b ist "primitive", a war's aber nicht, raus mit false
if(b.getClass().getComponentType().isPrimitive())
return false;
// Object-Array, von welchem Typ auch immer
return Arrays.equals((Object[])a, (Object[])b);
}
}
}
Michael