使用Scala中的Comparator
有什么问题?调用未编译:
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(
^
这有什么不对?
答案 0 :(得分:2)
我必须同意你的看法:错误信息不是很清楚。
这在这里有效:
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
是什么,因此它是Comparable
。您必须明确写出您正在比较BigInteger
s。我不确定为什么,但它似乎是通用java方法的常见问题(here是我最近才看到的另一个类似例子)。