无法从Scala通用方法调用重载Java方法

时间:2018-09-26 17:11:27

标签: scala

我正在尝试在Scala中以通用方式包装java.util.Array.binarySearch,但是以下代码不起作用:

 def binarySlice[T](minValue: T, array: Array[T]): Array[T] = {
   val i = java.util.Arrays.binarySearch(array, minValue)
   val idx = if (i > 0) i else -i - 1
   array.slice(idx, array.length)
 }

错误是:Cannot resolve overloaded method 'binarySearch'。我应该怎么做才能使此代码起作用?

1 个答案:

答案 0 :(得分:1)

请参阅:Scala replacement for Arrays.binarySearch

def binarySlice[T <: AnyRef](minValue: T, array: Array[T]): Array[T] = {
   val i = java.util.Arrays.binarySearch(array.asInstanceOf[Array[AnyRef]], minValue)
   val idx = if (i > 0) i else -i - 1
   array.slice(idx, array.length)
 }

不能将其用于基元。这是int的解决方法:

scala> binarySlice[java.lang.Integer](3, Array(0,3,7,8))
res6: Array[Integer] = Array(3, 7, 8)