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



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

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

最初,受到了来自约书亚·布洛赫(Joshua Bloch)的抵制:

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

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

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

我们愿意牺牲这一点;设计纯度";在实用主义的祭坛上,但我不相信有真正的必要比较布尔派。想要对布尔型列表进行排序的情况非常罕见。更常见的是,希望根据该字段对包含布尔字段的对象列表进行排序,但这样做需要使用Comparator。如果您无论如何都在编写Comparator,那么基于布尔字段进行排序是很简单的,即使布尔本身并没有实现Comparable。

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

多年来,很明显,如果我们提供这一功能,人们的生活会更轻松。

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

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

Comparable没有那么有用,因为只有两个可能的值,所以它可能是为了与其他包装保持一致。

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

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

这里有一个。尝试用boolean实例化ArrayList<T>。。。

最新更新