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

Sor*_*ona 0 java collections scala scala-java-interop

我导入了这个:

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)
}
Run Code Online (Sandbox Code Playgroud)

现在getNeighbours返回一个java.util.ArrayList而不是一个ArrayBuffer(它是一个我无法控制的Java类).

编译说

ArrayList [Field]类型的表达式不符合预期类型ArrayBuffer [Field]

JavaConversions不应该处理这个吗?如何轻松地将ArrayList转换为ArrayBuffer?(我不想在Scala代码中用ArrayList替换ArrayBuffer!)

sjr*_*jrd 5

An ArrayBuffer是一个特定的实现Buffer,由一个支持Array.你不能得到一个ArrayBuffer支持ArrayList.

JavaConversions为您提供从包装转换java.util.ListBuffer(不ArrayBuffer).

要么将fields变量重新键入为a Buffer[Field],要么必须其元素复制ArrayList为新变量ArrayBuffer:

fields = ArrayBuffer(field.getNeighours: _*)
Run Code Online (Sandbox Code Playgroud)