在 Java 中工作,假设我有两个对象,这要归功于obj.getClass().isArray()
,我知道都是数组。进一步说,我想将这两个数组进行相互比较——可能通过使用Arrays.equals
。有没有一种优雅的方法可以做到这一点,而无需求助于一个详尽的 if/else 树来找出哪种风格Arrays.equals
需要使用吗?我正在寻找比这更不碍眼的东西:
if (obj1 instanceof byte[] && obj2 instanceof byte[]) {
return Arrays.equals((byte[])obj1, (byte[])obj2);
}
else if (obj1 instanceof boolean[] && obj2 instanceof boolean[]) {
...
您可以使用反射。
public static boolean arrayEquals(Object arr1, Object arr2) throws Exception {
Class<?> c = arr1.getClass();
if (!c.getComponentType().isPrimitive()) {
c = Object[].class;
}
Method m = Arrays.class.getMethod("equals", c, c);
return (Boolean) m.invoke(null, arr1, arr2);
}
反射仅用于在运行时找到正确的方法,而不是您想要避免的碍眼的情况;实际上Arrays.equals
方法应该运行得很快。
显然生产版本需要更强大的异常处理。您可能还想使用deepEquals(Object[], Object[])
代替equals(Object[], Object[])
对于非原始数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)