引入scala.collection.JavaConversions里的隐式转换方法。可以在代码中使用Scala缓冲,在调用Java方法时,这些对象会被自动封装成Java列表。

举例来说,java.lang.ProcessBuilder类有一个以List<String>为参数的构造器。以下是Scala中调用它的写法:

import scala.collection.JavaConversions.bufferAsJavaList
import scala.collection.mutable.ArrayBuffer
val command = ArrayBuffer("ls", "-al", "/home/liuyazhuang")
val pb = new ProcessBuilder(command) //Scala到Java的转换

Scala缓冲被包装成了一个实现了java.util.List接口的Java类的对象。

反过来讲,当Java方法返回java.util.List时,我们可以让它自动转换成一个Buffer:

import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable.Buffer
val cmd : Buffer[String] = pb.command() //Java到Scala的转换

注意:不能使用ArrayBuffer——包装起来的对象仅能保证是个Buffer

如果Java方法返回一个包装过的Scala缓冲,那么隐式转换会将原始的对象解包出来,拿本例来说,cmd==command