java - 通用平等测试

标签 java equals

我想检查两个Java对象是否相等。此检查也适用于数组。我写的是:

/** Check if two Java objects are equal. */
private static <T> boolean equal (T a, T b)
{
  if (a == null)
    if (b == null)
      return true;
    else
      if (b.getClass().isArray())
        return Arrays.equals(b, a);
      else
        return b.equals(a);
  else
    if (a.getClass().isArray())
      return Arrays.equals(a, b);
    else
      return a.equals(b);
}

但是调用Arrays.equals无法编译并出现以下错误:

no suitable method found for equals(T,T)

我该如何解决这个问题?

最佳答案

如果你查看java.util.Arrays.deepEquals0(Object, Object)

可以看到下面的代码

static boolean deepEquals0(Object e1, Object e2) {
    assert e1 != null;
    boolean eq;
    if (e1 instanceof Object[] && e2 instanceof Object[])
        eq = deepEquals ((Object[]) e1, (Object[]) e2);
    else if (e1 instanceof byte[] && e2 instanceof byte[])
        eq = equals((byte[]) e1, (byte[]) e2);
    else if (e1 instanceof short[] && e2 instanceof short[])
        eq = equals((short[]) e1, (short[]) e2);
    else if (e1 instanceof int[] && e2 instanceof int[])
        eq = equals((int[]) e1, (int[]) e2);
    else if (e1 instanceof long[] && e2 instanceof long[])
        eq = equals((long[]) e1, (long[]) e2);
    else if (e1 instanceof char[] && e2 instanceof char[])
        eq = equals((char[]) e1, (char[]) e2);
    else if (e1 instanceof float[] && e2 instanceof float[])
        eq = equals((float[]) e1, (float[]) e2);
    else if (e1 instanceof double[] && e2 instanceof double[])
        eq = equals((double[]) e1, (double[]) e2);
    else if (e1 instanceof boolean[] && e2 instanceof boolean[])
        eq = equals((boolean[]) e1, (boolean[]) e2);
    else
        eq = e1.equals(e2);
    return eq;
}

所以我认为你需要做类似的事情。

关于java - 通用平等测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531740/

相关文章:

java - 当覆盖实体中的 equals 时我应该检查集合吗?

java - 无法使用 Jackson 在 Android 中正确处理天气 json

c# - 可以与 WCF 交互的 Java Web 服务工具包

scala - Scala 的 BigDecimal 是否违反了 equals/hashCode 契约?

java - Int 不能在 equals 方法中取消引用

java - Java 中的 equals() 方法是如何工作的

java - 令人难以置信的 Java 相等测试错误

java - 使用 BufferedReader 进行无限循环

java - Eclipse 3.5 和 Java 7

java - 做 while 与 try catch 附上的麻烦