cre*_*and -4 java lambda equals hashcode class-method
我是 Java 新手。有人可以向我解释一下这里使用 lambda 和方法有什么区别吗?
方法等于()
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Book)) {
return false;
}
Book book = (Book) o;
if (!author.equals(book.author)) {
return false;
}
return title.equals(book.title);
}
Run Code Online (Sandbox Code Playgroud)
拉姆达等于()
public Function<Object, Boolean> equals = (Object o) -> {
if (this == o) {
return true;
}
if (!(o instanceof Book)) {
return false;
}
Book book = (Book) o;
if (!author.equals(book.author)) {
return false;
}
return title.equals(book.title);
};
Run Code Online (Sandbox Code Playgroud)
方法 hashCode()
@Override
public int hashCode() {
return 31 * author.hashCode() + title.hashCode();
}
Run Code Online (Sandbox Code Playgroud)
兰巴哈希码()
public Supplier<Integer> hashCode = () -> 31 * author.hashCode() + title.hashCode();
Run Code Online (Sandbox Code Playgroud)
我想使用 Lambda 而不是 equals 和 hashCode 方法。
可以吗?
不,这不行。Java 定义了方法boolean equals(Object)和int hashCode()。这是一个特定的签名,您建议的解决方案不符合该签名,并且不会覆盖默认实现Object(事实上,它们甚至不是方法)。
您可以在and中使用lambda ,但这只会增加不必要的间接级别,并使您的代码更难以阅读。equalshashCode
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |