我有一系列POJO,我一直在使用龙目岛填写,事情非常顺利。我已经开始使用Java 8的Optional<>制作可选项了。 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设为all<>并且测试仍然通过,但是当我使数据可选时,测试突然失败。
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可以处理比较?
答案 0 :(得分:2)
龙目岛有着特殊的魔力;它知道数组不能正确地遵守equals合约,而是使用Arrays.equals。
可选&LT;&GT;并不像lombok那样聪明,也没有考虑到这一点。我们无法真正解决这个问题;这是可选的问题。
在从流API方法返回它的非常有限的域之外的任何地方,可选的是一个非常糟糕的想法。你不应该在这里使用它,特别是不能作为任何字段或任何参数的类型。只是不要使用它。对于数组来说,情况更是如此;只使用一个空数组。
注意:泛型和数组不混合。原因#9103对于java来说,可选是一个坏主意。