无法将返回的 java.util.ArrayList 分配给 scala.collection.mutable.ArrayBuffer。为什么?

Can't assign returned java.util.ArrayList to scala.collection.mutable.ArrayBuffer. Why?

我已经导入了这个:

import scala.collection.JavaConversions._

val size: Int = blubb.getSize
var fields: ArrayBuffer[Field] = new ArrayBuffer[Field]

size match
{
    case 1 => fields.append(field)
    case 2 => fields = field.getNeighbours)
}

现在 getNeighbours returns 一个 java.util.ArrayList 而不是 ArrayBuffer(它是一个 Java class 我无法控制)。

编译器说

Expression of type ArrayList[Field] doesn't conform to expected type ArrayBuffer[Field]

Java转换不应该解决这个问题吗?如何轻松地将 ArrayList 转换为 ArrayBuffer? (我不想在 Scala 代码中用 ArrayList 替换 ArrayBuffer!)

ArrayBufferBuffer 的特定实现,由 Array 支持。 ArrayBuffer 不能由 ArrayList.

支持

JavaConversions 为您提供从 java.util.ListBuffer(不是 ArrayBuffer)的换行转换。

要么您将 fields 变量重新键入为 Buffer[Field],要么您必须 ArrayList 的元素 复制到一个新的ArrayBuffer:

fields = ArrayBuffer(field.getNeighours: _*)

因为 ArrayBuffer 不是 ArrayList。 sjrd 建议使用 javas 内置转换,但您也可以只使用 for 循环将数据从 arraylist 复制到新的 ArrayBuffer,然后再传递它。