我在一个 Jar 文件中有这个 Java 类,作为 Scala 程序的依赖项(如 Axis jar):
class MyClass {
private String[] someStrings;
public String[] getSomeStrings() { return someStrings; }
}
在我的 Scala 程序中,我有一个 Java API,它将 MyClass 的 MyClass 实例返回给我在 Scala 中的程序:
val myInstance = JavaAPI.getInstanceOfMyClass()
然后我尝试在我的 Scala 程序中使用someStrings数组,但它为空(假设它没有正确初始化)
for(str <- myInstance.getSomeStrings()) ...
所以这会引发NullPointerException。
我发现为了在 for comprehension 中使用它,我可以将它包装到一个 Option 中,以便它正确处理 NPE。
for(str <- Option[Array[String]](myInstance.getSomeStrings).getOrElse(Array[String]())
但这对我来说看起来不太好。
有没有一种方法可以像隐式方法一样创建即使它为 null 并将其包装到 Option 中的隐式方法,例如:
implicit def wrapNull(a: Null): Option[Nothing] = None
implicit def wrapArray(a: Array[String]): Option[Array[String]] = Some(a)
所以当我这样做时:
for(str <- myInstance.getSomeStrings())
我没有得到NPE
提前致谢!