如何使用Java 7+';Objects.hash()和#x27;使用数组?

如何使用Java 7+';Objects.hash()和#x27;使用数组?,java,arrays,java-7,hashcode,Java,Arrays,Java 7,Hashcode,我非常喜欢Java 7+的写作风格hashCode()method: @Override public int hashCode() { Objects.hash(field1, field2); } 但它不能正确地处理数组。以下代码: @Override public int hashCode() { Objects.hash(field1, field2, array1, array2); } 对于array1和array2常规hashCode()而不是数组,将不起作用。

我非常喜欢Java 7+的写作风格
hashCode()
method:

@Override
public int hashCode() {
    Objects.hash(field1, field2);
}
但它不能正确地处理数组。以下代码:

@Override
public int hashCode() {
    Objects.hash(field1, field2, array1, array2);
}
对于
array1
array2
常规
hashCode()
而不是
数组,将不起作用。将调用hashCode()

如何正确地将
Objects.hash()与数组一起使用?

您可以尝试:

Objects.hash(field1, field2, Arrays.hashCode(array1), Arrays.hashCode(array2));
这与创建一个包含
field1
field2
array1
array2
内容的数组相同。然后在此数组上计算
数组。hashCode

将发现数组中的数组(通过
instanceof Object[]
)并递归调用自身。 看

如果数组包含其他数组作为元素,则哈希代码将基于它们的内容,依此类推

使用类似于
Objects.hash的params版本会很有用,但您必须编写自己的:

public final class HashUtils {
    private HashUtils(){}

    public static int deepHashCode(Object... fields) {
        return Arrays.deepHashCode(fields);
    }
}
用法:

@Override
public int hashCode() {
    return HashUtils.deepHashCode(field1, field2, array1, array2);
}

您可能必须使用
数组。deepHashCode
@LouisWasserman-您能详细说明为什么我需要使用深度哈希代码吗?
@Override
public int hashCode() {
    return HashUtils.deepHashCode(field1, field2, array1, array2);
}