java - 在 Predicate 接口中,为什么这些方法 negate() and() & or() 是默认的。它们可以很容易地被覆盖
问题描述
我正在阅读 Java 8 中的谓词接口,不知道为什么 Java 将 negate(), and() & or() 作为默认方法而不是静态方法
在实现类中可以轻松地覆盖默认方法。根据我的理解,这些方法的行为永远不应该改变。
谓词也有 isEqual() 方法,它是静态的
我理解这里提到的默认方法的目的(Java 8 中 Default 或 Defender 方法的目的),即:如果我们在接口中添加新方法,则不会破坏客户端实现,lambda impl
但我的问题是为什么不将它们设为静态方法而不是默认方法?使其成为静态的好处:
- 没有人可以覆盖它们
- 谓词仍然是功能接口(与默认相同)
- 可以为此类接口提供 lambda 实现(与默认值相同)
找到答案:如果我们将这些方法设为静态,那么我们将无法链接这些方法
p1.or(p2) 将不可能
解决方案
推荐阅读
- vb.net - 如何从另一个集合中的项目中获取集合,该集合也是集合
- node.js - 一些 SQS 消息从未到达 Lambda,即使我从 sendMessage 收到消息 ID
- facebook - 在 Facebook 上分享/发布预定义评论的按钮?
- javascript - 如何比较两个包含“echo”语句而不显示“echo”的php函数?
- ios - 重新实例化故事板导航栏按钮
- python - 由于插入命令中的单引号导致 psycopg2 语法错误
- c# - 如何在 C# 中创建“用于从 SQL Server 数据库中删除网格列的删除按钮”?
- python - MERGESORT 永远不会到达第二个数组/列表
- sql - 如何在其他 INSERT 语句中使用 INSERT 语句的结果?
- android - SettingsClient 的位置请求总是得到 RESULT_CANCELED