Lombok EqualsAndHashCode 处理可选数组
Lombok EqualsAndHashCode handling optional arrays
我有一系列的 POJO,我一直在使用 Lombok 来填写,一切都非常顺利。我已经开始使用 Java 8 的 Optional<> class 使事情变得可选,但是在使字节数组成为可选时我 运行 遇到了麻烦。在我的单元测试中,比较对象可以很好地比较以相同方式构建的 class 的两个实例:
@NoArgsConstructor @Getter @Setter @EqualsAndHashCode @ToString
public class Attachment {
private String contentType;
private LanguageCode language;
private byte[] data;
private URI url;
private String title;
}
我可以将 contentType、language、url 和 title 都设置为 Optional<> 并且测试仍然通过,但是当我将 data 设置为可选时测试突然失败。
private Optional<byte[]> data;
结果:
expected
[Attachment(contentType=Optional[UTF-8], language=Optional[en], data=Optional[[B@27eb3298], url=Optional[test://testuri], title=Optional[test text])]
but found
[Attachment(contentType=Optional[UTF-8], language=Optional[en], data=Optional[[B@200a26bc], url=Optional[test://testuri], title=Optional[test text])]
是否有任何特定的方法来处理可选数组以便 lombok 可以处理比较?
龙目岛有特殊的魔法;它知道数组没有正确遵守 equals 契约,而是使用 Arrays.equals。
Optional<> 不如 lombok 聪明,没有考虑到这一点。我们无法真正解决这个问题;这是可选的问题。
可选通常在从流 API 方法返回的非常有限的域之外的任何地方都是一个非常糟糕的主意。你不应该在这里使用它,尤其是不应该作为任何字段或任何参数的类型。只是不要使用它。对于数组来说,这是双重的;只需使用一个空数组。
注意:泛型和数组不能混用。原因 #9103 可选对于 java.
不是一个好主意
我有一系列的 POJO,我一直在使用 Lombok 来填写,一切都非常顺利。我已经开始使用 Java 8 的 Optional<> class 使事情变得可选,但是在使字节数组成为可选时我 运行 遇到了麻烦。在我的单元测试中,比较对象可以很好地比较以相同方式构建的 class 的两个实例:
@NoArgsConstructor @Getter @Setter @EqualsAndHashCode @ToString
public class Attachment {
private String contentType;
private LanguageCode language;
private byte[] data;
private URI url;
private String title;
}
我可以将 contentType、language、url 和 title 都设置为 Optional<> 并且测试仍然通过,但是当我将 data 设置为可选时测试突然失败。
private Optional<byte[]> data;
结果:
expected
[Attachment(contentType=Optional[UTF-8], language=Optional[en], data=Optional[[B@27eb3298], url=Optional[test://testuri], title=Optional[test text])]
but found
[Attachment(contentType=Optional[UTF-8], language=Optional[en], data=Optional[[B@200a26bc], url=Optional[test://testuri], title=Optional[test text])]
是否有任何特定的方法来处理可选数组以便 lombok 可以处理比较?
龙目岛有特殊的魔法;它知道数组没有正确遵守 equals 契约,而是使用 Arrays.equals。
Optional<> 不如 lombok 聪明,没有考虑到这一点。我们无法真正解决这个问题;这是可选的问题。
可选通常在从流 API 方法返回的非常有限的域之外的任何地方都是一个非常糟糕的主意。你不应该在这里使用它,尤其是不应该作为任何字段或任何参数的类型。只是不要使用它。对于数组来说,这是双重的;只需使用一个空数组。
注意:泛型和数组不能混用。原因 #9103 可选对于 java.
不是一个好主意