【问题标题】:Why does Scala's RichInt extends Comparable[Int] instead of Comparable[RichInt]?为什么 Scala 的 RichInt 扩展 Comparable[Int] 而不是 Comparable[RichInt]?
【发布时间】:2018-03-05 01:39:08
【问题描述】:

为什么 Scala 的 RichInt 扩展 Comparable[Int] 而不是 Comparable[RichInt]

我是 Scala 新手。在浏览 Scala 库代码时,我注意到 RichInt 类扩展了 ScalaNumberProxy[Int]ScalaNumberProxy 扩展 OrderedProxyOrderedProxy 扩展 OrderedOrdered 扩展 java.lang.Comparable。 所以我的理解是RichInt(间接)扩展了java.lang.Comparable[Int]

我的问题是它为什么不扩展 java.lang.Comparable[RichInt]

我提出这个问题的原因是在 Java 中,我会写这样的代码:

class A implements Comparable<A> {

    @Override

    public int compareTo(A other) {
        //implement the method.
    }
    ....
}

【问题讨论】:

    标签: scala comparable


    【解决方案1】:

    首先我们需要知道RichInt 用于Int 类型提供帮助函数,由implicit conversionsPredef 中定义:

    @inline implicit def intWrapper(x: Int) = new runtime.RichInt(x)
    

    所以你可以像这样使用它:

    2.doubleValue()
    2.shortValue()
    ...
    

    对于您的问题:为什么不扩展 java.lang.Comparable[RichInt]

    因为我们实际上是在 Int 类型上操作,而不是 RichInt 类型。喜欢:

    2.compare(3)
    

    【讨论】:

    • 感谢您的解释。这是非常有帮助的。我还有一个问题:如果它扩展 java.lang.Comparable[RichInt] 会发生什么?感谢您的热心帮助。
    • 如果扩展java.lang.Comparable[RichInt],这将绑定Comparable函数(compareTo)在RichInt类型。但实际上RichInt 是针对 Int 类型而不是 RichInt 类型的丰富功能。
    • 感谢您的解释。所以我的理解是,如果RichInt extends java.lang.Comparable[RichInt]Int 类型就不是Comparable
    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多