Scala的JavaConverters会产生不完整的结果吗?

时间:2017-06-30 04:24:25

标签: scala

以下代码将Scala List转换为java.util.List(在Scala 2.11中测试)

import scala.collection.JavaConverters._
val a = List(1, 2, 3)
val b = a.asJava

但是,转换结果似乎不完整。因为java.util.List中的某些方法不起作用。

scala> b.remove(2)
java.lang.UnsupportedOperationException
  at java.util.AbstractList.remove(AbstractList.java:161)
  ... 29 elided

我的解决方法如下:

val c = new java.util.ArrayList(a.asJava)

这有效但在API设计方面似乎是多余的。

这是使用asJava方法的正确方法吗?

为什么Scala的JavaConverters会产生不完整的结果?

2 个答案:

答案 0 :(得分:2)

看起来你从asJava获得的是一个不可变列表,因为你已经开始使用不可变的Scala列表。请尝试以下

val a = List(1,2,3).to[scala.collection.mutable.ListBuffer].asJava

答案 1 :(得分:2)

  

因为java.util.List中的某些方法不起作用。

这些方法是显式可选的,因为java.util.List涵盖了可变列表和不可变列表,Java标准库中的一些实现也不支持它们:

  
    

从此列表中删除指定元素的第一个匹配项(如果存在)(可选操作)...

         

抛出:... UnsupportedOperationException - 如果此列表不支持删除操作

  

其他Java集合接口也是如此。所以结果 完全满足界面。