rar*_*rry 0 scala scala-java-interop
想象一下我有一个Java列表
val javaList: java.util.List[String] = null
Run Code Online (Sandbox Code Playgroud)
如果我想将其用作scala集合,比如说Buffer,我只需添加以下导入(如之前多次描述)
import scala.collection.JavaConversions._
Run Code Online (Sandbox Code Playgroud)
问题是我必须检查列表是否不同于null。这将不起作用:
javaList foreach println //throws java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以将java列表转换为scala集合,从而将null转换为Buffer.empty?与Option工厂相似:
Option(null) //> res0: Option[Null] = None
asScalaBuffer(javaList) // I wish this to be ArrayBuffer()
Run Code Online (Sandbox Code Playgroud)
只需将其映射并与Option一起使用
Option(javaList).map(asScalaBuffer).getOrElse(ArrayBuffer.empty)
Run Code Online (Sandbox Code Playgroud)
更新资料
如果您仍然想要null数组/列表的工厂,则可以通过“构造方法”(基于Rex Kerr的回答)对其进行仿真:
def ArrayBuffer[T](jl: JavaList[T]) = if (jl == null) ArrayBuffer.empty[T] else asScalaBuffer(jl)
Run Code Online (Sandbox Code Playgroud)
然后使用ArrayBuffer(null.asInstanceOf[JavaList[String])它就像Option.apply:
def apply[A](x: A): Option[A] = if (x == null) None else Some(x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |