【问题标题】:Why Boolean wrapper class implements Serializable interface and Comparable interface ? What is the use of it?为什么布尔包装类实现 Serializable 接口和 Comparable 接口?它有什么用?
【发布时间】:2012-12-03 06:21:03
【问题描述】:

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

【问题讨论】:

标签: java class boolean wrapper


【解决方案1】:

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

最初,有不少于Joshua Bloch的回击:

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

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

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

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

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

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

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

【讨论】:

  • 好消息,安迪!
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      这是一个。尝试用 boolean 实例化 ArrayList&lt;T&gt; ...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-10
        • 2012-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2019-10-09
        • 2018-10-24
        相关资源
        最近更新 更多