equals() 和 hashCode() 可以是 lambda 表达式吗?

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 方法。

可以吗?

Mar*_*eel 6

不,这不行。Java 定义了方法boolean equals(Object)int hashCode()。这是一个特定的签名,您建议的解决方案不符合该签名,并且不会覆盖默认实现Object(事实上,它们甚至不是方法)。

您可以在and中使用lambda ,但这只会增加不必要的间接级别,并使您的代码更难以阅读。equalshashCode