给定以下代码:
public static void main(String[] args) {
record Foo(int[] ints){}
var ints = new int[]{1, 2};
var foo = new Foo(ints);
System.out.println(foo); // Foo[ints=[I@6433a2]
System.out.println(new Foo(new int[]{1,2}).equals(new Foo(new int[]{1,2}))); // false
System.out.println(new Foo(ints).equals(new Foo(ints))); //true
System.out.println(foo.equals(foo)); // true
}
显然,使用了数组的toString
,equals
方法(而不是静态方法Arrays::equals
,Arrays::deepEquals
或Array::toString
)。
所以我猜Java 14 Records(JEP 359)不能很好地处理数组,必须使用IDE生成相应的方法(至少在IntelliJ中,默认情况下会生成“有用”的方法,即它们使用静态方法中Arrays
)。
或者有没有其他解决方案?