使用 ignorecase 生成 Lombok equals 方法
Generate Lombok equals method with ignorecase
可以注释 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;
}
}
可以,但不要这样做。
Lombok 不是定制工具。它是一种省略样板代码的工具。
@EqualsAndHashCode
生成代码,为每个要比较的字段调用 getters。
解决问题执行 getter:
public getBar() {
return bar != null ? bar.toLowerCase() : null;
}
比较将小写。在此之后 getter 将 broken.
您可以从 equals 中排除字段并包含自定义函数:
@EqualsAndHashCode
class Foo {
@EqualsAndHashCode.Exclude
private String bar;
@EqualsAndHashCode.Include
private String normalizedBar() {
return bar != null ? bar.toLowerCase() : null;
}
}
这个问题涉及类似的问题:How to make Lombok's EqualsAndHashCode work with BigDecimal
更多讨论在这里:https://github.com/projectlombok/lombok/issues/1260#issuecomment-268114093
可以注释 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;
}
}
可以,但不要这样做。
Lombok 不是定制工具。它是一种省略样板代码的工具。
@EqualsAndHashCode
生成代码,为每个要比较的字段调用 getters。
解决问题执行 getter:
public getBar() {
return bar != null ? bar.toLowerCase() : null;
}
比较将小写。在此之后 getter 将 broken.
您可以从 equals 中排除字段并包含自定义函数:
@EqualsAndHashCode
class Foo {
@EqualsAndHashCode.Exclude
private String bar;
@EqualsAndHashCode.Include
private String normalizedBar() {
return bar != null ? bar.toLowerCase() : null;
}
}
这个问题涉及类似的问题:How to make Lombok's EqualsAndHashCode work with BigDecimal
更多讨论在这里:https://github.com/projectlombok/lombok/issues/1260#issuecomment-268114093