[CollectionConverts
API状态
在所有情况下,从源类型转换为目标类型然后返回再次将返回原始源对象。
这似乎并不总是正确的。例如,在以下情况下,确实是CollectionConverts
true
但是val orig = ListBuffer(1,2,3)
assert(orig.asJava.asScala eq orig) // OK
断言失败
here
断言通过[更改为val orig = ListBuffer(1,2,3).asJava
assert(orig.asScala.asJava eq orig) // Boom!
而不是List
ListBuffer
中例是否表示已复制?如果是这样,那么何时复制副本的确切规则是什么?
[val orig = List(1,2,3).asJava
assert(orig.asScala.asJava eq orig) // OK
和asJava
从不复制整个集合,但是它们确实实例化包装器。
在asScala
之后,val orig = ListBuffer(1,2,3).asJava
是包装器,是类orig
的实例。
在下一个scala.collection.convert.JavaCollectionWrappers$MutableBufferWrapper
之后,您将获得原始的.asScala
。
现在您再次呼叫ListBuffer
。在这一点上,除了实例化一个新的包装程序外,没有其他可能的结果,而不是(如您所发现的).asJava
到先前的包装程序。
您引用的保证适用于原始集合,而不适用于转换包装。也许措词应该对此更清楚。