繁体   English   中英

为什么布尔包装类实现了 Serializable 接口和 Comparable 接口? 它有什么用?

[英]Why Boolean wrapper class implements Serializable interface and Comparable interface ? What is the use of it?

为什么 Boolean 和 Character 包装类正在实现 Serializable 接口和 Comparable 接口? 它有什么用?

Comparable接口被添加到Java 5 中Boolean类,以解决错误JDK-4329937和至少一个其他问题。 引用的问题之一是对JTable布尔列进行排序。

最初,有不少于Joshua Bloch 的反对

当前的设计与语言本身一致:尝试比较两个布尔值的顺序是编译时错误:

 if (true < false) // ERROR: WON'T COMPILE foo();

包装类(Boolean)仅反映包装原语的行为。 ...

我们愿意在实用主义的祭坛上牺牲这种“设计纯度”,但我不相信真正需要比较布尔值。 想要对布尔值列表进行排序是非常罕见的。 更常见的是想要根据该字段对包含布尔字段的对象列表进行排序,但这样做需要使用比较器。 无论如何,如果您正在编写 Comparator,即使 Boolean 本身没有实现 Comparable,也可以直接根据 Boolean 字段进行排序。

但几年后,该实用程序得到了认可:

多年来,很明显,如果我们提供此功能,它将使人们的生活更轻松。

自从实施了此增强功能后,它变得更加有用。 例如,在Java 8 中Comparator类引入了新方法thenComparing comparing()thenComparing ,它们可以基于字段构建比较器。 将布尔字段作为排序标准的一部分可能是合理且有用的。

它实现了 Serializable,以便可以序列化包含它的对象。 不使其可序列化将是一个严重的限制。

Comparable 不是很有用,因为只有两个可能的值,因此它可能是为了与其他包装器保持一致。

注意: Void不可序列化或可比较,但它只能是可序列化的null

要在大多数 Collection 类中使用任何原语,它们必须实现 Comparable。 如果没有包装器,就不能在任何有序的 Collection 类中使用原语。 此外,作为纯原语,它没有 equals 方法,因此任何基于键的 Collection 类都不起作用。

这是一个。 尝试使用boolean实例化ArrayList<T> ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM