无法将返回的 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!)
ArrayBuffer
是 Buffer
的特定实现,由 Array
支持。 ArrayBuffer
不能由 ArrayList
.
支持
JavaConversions
为您提供从 java.util.List
到 Buffer
(不是 ArrayBuffer
)的换行转换。
要么您将 fields
变量重新键入为 Buffer[Field]
,要么您必须 将 ArrayList
的元素 复制到一个新的ArrayBuffer
:
fields = ArrayBuffer(field.getNeighours: _*)
因为 ArrayBuffer 不是 ArrayList。 sjrd 建议使用 javas 内置转换,但您也可以只使用 for 循环将数据从 arraylist 复制到新的 ArrayBuffer,然后再传递它。
我已经导入了这个:
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!)
ArrayBuffer
是 Buffer
的特定实现,由 Array
支持。 ArrayBuffer
不能由 ArrayList
.
JavaConversions
为您提供从 java.util.List
到 Buffer
(不是 ArrayBuffer
)的换行转换。
要么您将 fields
变量重新键入为 Buffer[Field]
,要么您必须 将 ArrayList
的元素 复制到一个新的ArrayBuffer
:
fields = ArrayBuffer(field.getNeighours: _*)
因为 ArrayBuffer 不是 ArrayList。 sjrd 建议使用 javas 内置转换,但您也可以只使用 for 循环将数据从 arraylist 复制到新的 ArrayBuffer,然后再传递它。