【问题标题】:Missing arguments for method toArray in trait List when converting from java ArrayList to scala Array从 java ArrayList 转换为 scala Array 时,特征列表中的方法 toArray 缺少参数
【发布时间】:2015-03-05 19:48:17
【问题描述】:

我有这个简单的代码:

import java.util
import scala.collection.JavaConversions._

def f(x: util.List[Int]): Array[Int] = {
  x.toArray[Int]
}

error: missing arguments for method toArray in trait List 失败

但是toArray 的源代码如下:

trait TraversableOnce[+A] extends Any with GenTraversableOnce[A] {
...
  def toArray[B >: A : ClassTag]: Array[B] = {
    if (isTraversableAgain) {
      val result = new Array[B](size)
      copyToArray(result, 0)
      result
    }
    else toBuffer.toArray
  }

显然没有遗漏的论点。

1) 这怎么可能?有简单的解决方法吗?还是我错过了什么?

2) 错误消息以follow this method with '_' if you want to treat it as a partially applied function 继续。你不觉得这是一个愚蠢的提议吗?我已经声明了返回值,所以部分应用的函数不能工作。编译器应该会看到它。

【问题讨论】:

    标签: java scala arraylist partial-application toarray


    【解决方案1】:

    这看起来是因为java.util.List 已经定义了它自己的toArray 方法。它定义了toArray():ObjecttoArray(T[]):T[]。因为这些是可用的,所以它不会隐式转换为 Scala List。但是 Java List 上的 toArray() 方法没有预期的返回类型,因此它需要使用带单个参数的方法(具有通用返回类型),这就是您收到此错误消息的原因.

    如果您显式转换为 Scala List,那么它应该会找到所需的 toArray 方法,并按预期工作。所以代码应该是这样的:

    import java.util
    import scala.collection.JavaConverters._
    
    def f(x: util.List[Int]): Array[Int] = {
      x.asScala.toArray[Int]
    }
    

    【讨论】:

    • 也许缺少一个导入? error: value toScala is not a member of java.util.List[Int]
    • @mirelon 哎呀,打错了。现在应该修好了。
    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2012-04-13
    • 2016-07-20
    • 1970-01-01
    相关资源
    最近更新 更多