Can';t将返回的java.util.ArrayList分配给scala.collection.mutable.ArrayBuffer。为什么?
我导入了这个:Can';t将返回的java.util.ArrayList分配给scala.collection.mutable.ArrayBuffer。为什么?,java,scala,collections,scala-java-interop,Java,Scala,Collections,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) } 现在GetNeight
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)
}
现在GetNeights返回一个java.util.ArrayList而不是ArrayBuffer(这是一个我无法控制的java类)
编译说
ArrayList[Field]类型的表达式不符合预期类型
ArrayBuffer[字段]
JavaConversion不应该处理这个问题吗?如何轻松地将ArrayList转换为ArrayBuffer?(我不想在Scala代码中用ArrayList替换ArrayBuffer!)一个
ArrayBuffer
是一个缓冲区的特殊实现,由数组支持。不能让ArrayBuffer
由ArrayList
支持
JavaConversions
为您提供了从java.util.List
到Buffer
(非ArrayBuffer
)的包装转换
您可以将字段
变量重新键入为缓冲区[Field]
,或者必须将数组列表的元素复制到新的数组缓冲区
:
fields = ArrayBuffer(field.getNeighours: _*)
ArrayBuffer
是一种由数组
支持的缓冲区
的特殊实现。不能让ArrayBuffer
由ArrayList
支持
JavaConversions
为您提供了从java.util.List
到Buffer
(非ArrayBuffer
)的包装转换
您可以将字段
变量重新键入为缓冲区[Field]
,或者必须将数组列表的元素复制到新的数组缓冲区
:
fields = ArrayBuffer(field.getNeighours: _*)
因为ArrayBuffer不是ArrayList。sjrd建议使用Java内置转换,但也可以在传递数据之前使用for循环将数据从arraylist复制到新的ArrayBuffer。因为ArrayBuffer不是arraylist。sjrd建议使用Java内置转换,但您也可以在传递数据之前使用for循环将数据从arraylist复制到新的ArrayBuffer。应该显示支持的内容。我要提到的是,通常最好使用JavaConverters
而不是JavaConversions
,这样您就知道了(因为您明确指定)将会发生什么。应该显示支持什么。我要提到的是,通常最好使用JavaConverters
而不是JavaConverations
,这样您就知道(因为您明确指定)将会发生什么。您的第二个示例不会为我编译:案例2=>{fields=ArrayBuffer(field.getNeights(new Vector2(this.posX,this.posY),world):*);fields.append(field);fieldScont=3}预期的Seq[NotInferedA]实际的ArrayList[field]实际上第一个也不起作用。ArrayList[field]类型的表达式与预期的类型Buffer[field]不一致你说得对。不仅要重新加载我的想法,还要重新加载我的整个系统。不知道为什么。今天没有做任何更新(滚动发行版,Archlinux)oO,谢谢!你的第二个例子不会为我编译:案例2=>{fields=ArrayBuffer(field.getNeights(new Vector2(this.posX,this.posY),world):\u*;fields.append(field);fieldScont=3}预期的Seq[NotInferedA]实际的ArrayList[Field]实际上你的第一个也不起作用。ArrayList[Field]类型的表达式不符合预期的类型缓冲区[Field]你是对的。不仅要重新加载我的想法,还要重新加载我的整个系统。不确定为什么。今天没有做任何更新(滚动版本,Archlinux)oO,谢谢!