【问题标题】:Can't call overloaded Java method from Scala generic method无法从 Scala 泛型方法调用重载的 Java 方法
【发布时间】:2018-09-26 17:11:26
【问题描述】:

我正在尝试在 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'。我应该怎么做才能使这段代码工作?

【问题讨论】:

  • 您尝试使用哪种 binarySearch 方法? Array[T] 有两个实现,但它们需要另一个参数。
  • 第一个只有2个参数,第二个是目标值?
  • 有两个带有 Array[T] 参数的 binarySearch 方法,它们都没有两个参数。 public static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)public static <T> int binarySearch(T[] a, int fromIndex, int toIndex, T key, Comparator<? super T> c)

标签: scala


【解决方案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)

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多