Java阵列比较

Bla*_*ppo 9 java arrays

在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)

pol*_*nts 8

你可以使用反射.

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[])是非原始数组.