在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[]) {
...
Run Code Online (Sandbox Code Playgroud)
你可以使用反射.
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);
}
Run Code Online (Sandbox Code Playgroud)
反射仅用于在运行时找到正确的方法,而没有你想要避免的眼睛; 实际的Arrays.equals
方法应该运行得非常快.
显然,生产版本需要更强大的异常处理.您可能还想使用deepEquals(Object[], Object[])
而不equals(Object[], Object[])
是非原始数组.
归档时间: |
|
查看次数: |
8657 次 |
最近记录: |