gpt4 book ai didi

java - Lombok EqualsAndHashCode 处理可选数组

转载 作者:行者123 更新时间:2023-11-30 03:30:40 24 4
gpt4 key购买 nike

我有一系列 POJO,我一直在使用 Lombok 来填写,事情非常顺利。我已经开始使用 Java 8 的Optional<> 类将一些东西设置为可选,但是在将字节数组设置为可选时遇到了障碍。在我的单元测试中,比较对象可以很好地比较以相同方式构建的此类的两个实例:

@NoArgsConstructor @Getter @Setter @EqualsAndHashCode @ToString
public class Attachment {
private String contentType;
private LanguageCode language;
private byte[] data;
private URI url;
private String title;
}

我可以将 contentType、语言、url 和标题设为可选<>,测试仍然通过,但当我将数据设为可选时,测试突然失败。

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 可以处理比较?

最佳答案

Lombok 有特殊的魔力;它知道数组没有正确遵守 equals 约定,而是使用 Arrays.equals。

Optional<>不像lombok那么智能,没有考虑到这一点。我们无法真正解决这个问题;这是可选的问题。

一般来说,在从流 API 方法返回它的非常有限的范围之外的任何地方,可选都是一个非常糟糕的主意。您不应该在这里使用它,尤其是不作为任何字段或任何参数的类型。只是不要使用它。对于数组来说更是如此;只需使用一个空数组。

注意:泛型和数组不能混用。原因 #9103 对于 java 来说可选是一个坏主意。

关于java - Lombok EqualsAndHashCode 处理可选数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com