生成Lombok的equals方法并忽略大小写

4

能否注释一个String字段,以便Lombok生成一个忽略String值的大小写的equals方法。

也就是说,生成类似于以下内容:

public class Foo {
    private String bar;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Foo foo = (Foo) o;

        return bar != null ? StringUtils.equalsIgnoreCase(bar, foo.bar) : foo.bar == null;
    }    
}

相关:stackoverflow.com/q/36625347/3014199 - peer
2个回答

3

2

这是可能的,但不建议这样做。

Lombok不是一个用于定制的工具,而是一种省略样板代码的工具。

@EqualsAndHashCode 生成的代码会调用每个字段的getter方法进行比较。 要解决这个问题,请实现getter方法:

public getBar() {
    return bar != null ? bar.toLowerCase() : null;
}

比较将会变成小写。之后这个getter就会失效

1
请详细说明“此getter将被破坏”的含义。 - asgs
3
我正在使用apache commons-lang的EqualsBuilderHashCodeBuilder来实现这个行为。顺便说一句,“getter将被破坏”意味着getter不再是getter了,因为它转换了bar字段而不只是简单地返回它。 - Julien Kronegg
1
@asgs 我猜作者的意思是 lombok 不会为 bar 字段生成 getter,因为该字段的 getter 已经存在,并且在 equals/hashcode 方法中它将仅使用此自定义方法,将 bar 字段值转换为小写。 - Mikhail2048
感谢JulienKronegg和mihail2048的澄清。 - asgs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接