该Comparable接口已添加到Java 5 中的Boolean类中,以解决错误JDK-4329937和至少一个其他问题。引用的问题之一是对.JTable
最初,有不少于Joshua Bloch 的反对:
当前的设计与语言本身一致:尝试比较两个布尔值的顺序是编译时错误:
Run Code Online (Sandbox Code Playgroud)if (true < false) // ERROR: WON'T COMPILE foo();包装类(Boolean)仅反映包装原语的行为。...
我们愿意在实用主义的祭坛上牺牲这种“设计纯度”,但我不相信真正需要比较布尔值。想要对布尔值列表进行排序是非常罕见的。更常见的是想要根据该字段对包含布尔字段的对象列表进行排序,但这样做需要使用比较器。如果您正在编写 Comparator,即使 Boolean 本身没有实现 Comparable,也可以直接根据 Boolean 字段进行排序。
但几年后,该实用程序得到了认可:
多年来,很明显,如果我们提供此功能,它将使人们的生活更轻松。
自从实施了此增强功能后,它变得更加有用。例如,在Java 8 中,Comparator该类引入了新方法comparing()和thenComparing,可以构建基于字段的比较器。将布尔字段作为排序标准的一部分可能是合理且有用的。
它实现了 Serializable,以便可以序列化包含它的对象。不使其可序列化将是一个严重的限制。
Comparable 不是很有用,因为只有两个可能的值,因此它可能是为了与其他包装器保持一致。
注意:Void不可序列化或可比较,但只能是null可序列化的。