使用Scala的比较器

使用Scala的比较器,scala,function,Scala,Function,使用Scala的比较器有什么问题?调用未编译: java.util.Comparator.comparing( new java.util.function.Function[String, java.math.BigInteger] { override def apply(t: String) = new java.math.BigInteger(t) }) 错误信息非常不清楚 Main.scala:3: error: overloaded method va

使用Scala的
比较器有什么问题?调用未编译:

java.util.Comparator.comparing(
      new java.util.function.Function[String, java.math.BigInteger] {
        override def apply(t: String) = new java.math.BigInteger(t)
})

错误信息非常不清楚

Main.scala:3: error: overloaded method value comparing with alternatives:
  [T, U <: Comparable[_ >: U]](x$1: java.util.function.Function[_ >: T, _ <: U])java.util.Comparator[T] <and>
  [T, U](x$1: java.util.function.Function[_ >: T, _ <: U], x$2: java.util.Comparator[_ >: U])java.util.Comparator[T]
 cannot be applied to (java.util.function.Function[String,java.math.BigInteger])
    java.util.Comparator.comparing(
                         ^
Main.scala:3:错误:与备选方案相比重载了方法值:
[T,U:U]](x$1:java.util.function.function[\U>:T,\U:T,\U:U])java.util.Comparator[T]
无法应用于(java.util.function.function[String,java.math.BigInteger])
java.util.Comparator.Comparating(
^

有什么问题吗?

我不得不同意你的看法:错误信息不是很清楚

这在这里起作用:

java.util.Comparator.comparing[String, java.math.BigInteger](
  new java.util.function.Function[String, java.math.BigInteger] {
    override def apply(t: String) = new java.math.BigInteger(t)
  }
)
发生的情况是:出于某种奇怪的原因,它无法推断类型参数
U
是什么,因此它是
可比的
。您必须明确指出您正在比较
biginger
s。我不确定原因,但这似乎是通用java方法的常见问题(这是我最近看到的另一个类似的例子)