首页 > 解决方案 > 在 Predicate 接口中,为什么这些方法 negate() and() & or() 是默认的。它们可以很容易地被覆盖

问题描述

我正在阅读 Java 8 中的谓词接口,不知道为什么 Java 将 negate(), and() & or() 作为默认方法而不是静态方法

在实现类中可以轻松地覆盖默认方法。根据我的理解,这些方法的行为永远不应该改变。

谓词也有 isEqual() 方法,它是静态的

我理解这里提到的默认方法的目的(Java 8 中 Default 或 Defender 方法的目的),即:如果我们在接口中添加新方法,则不会破坏客户端实现,lambda impl

但我的问题是为什么不将它们设为静态方法而不是默认方法?使其成为静态的好处:

  1. 没有人可以覆盖它们
  2. 谓词仍然是功能接口(与默认相同)
  3. 可以为此类接口提供 lambda 实现(与默认值相同)

找到答案:如果我们将这些方法设为静态,那么我们将无法链接这些方法

p1.or(p2) 将不可能

标签: javajava-8predicate

解决方案


推荐阅读