java - 从 java ArrayList 转换为 scala Array 时,特征列表中的 toArray 方法缺少参数

标签 java scala arraylist partial-application toarray

我有这个简单的代码:

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

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

它因错误而失败:特征列表中的toArray方法缺少参数

但是 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) 错误消息继续如果您想将其视为部分应用的函数,请按照此方法添加“_”。你不觉得这是一个愚蠢的提议吗?我已经声明了返回值,所以部分应用的函数无法工作。编译器应该可以看到它。

最佳答案

这看起来是因为 java.util.List 已经定义了它自己的 toArray 方法。它定义了 toArray():Object 和 toArray(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]
}

关于java - 从 java ArrayList 转换为 scala Array 时,特征列表中的 toArray 方法缺少参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886440/

相关文章:

java - 如何增加 Spark Amazon EC2 集群上的 Java 堆空间?

java - 图像不会显示在 JavaFX 中

跳过 Scala 模式匹配案例

java - 访问 ArrayList 中每个数组的第一个元素并对所有元素求平均值

java - 由于相同的 HaschCode(重复对象),ArrayList 对象值更改

java - 对象的 .class 属性是否总是返回相同的实例?

java - FileInputStream读取方法的风格

file - 在 Scala 中查找与通配符字符串匹配的文件

scala - 如何在运行应用程序或测试用例时将JVM选项传递给SBT以使用?

java - Android开发: Getting the name of Images