Java Null的隐式包装

前端之家收集整理的这篇文章主要介绍了Java Null的隐式包装前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要从 Scala访问大量 Java接口.这些接口有可能返回Null的方法,我想将它们转换为Option [T]

我找到了像这样描述Option.apply()的其他答案

How to implicitly wrap a value that can be null or an array into an Scala Option

Option-izing Java getters

但是,这要求对于每个Java接口,我手动创建一个Scala包装器.像这样…

class ScalaFoo extends JavaFoo {
  def bar = Option(super.bar)
}

这似乎很乱,很难维护,容易出错.我不希望所有那些无效的额外代码,我想自动包装所有Java接口,这样如果一个更改,包装器也会改变.

当然,有一种方法可以用implicits做到这一点,不是吗?

解决方法

我最近最终得到了这样的东西:
object Implicits {
  implicit class ConvertToOption[T](t: T) {
    def optional = Option(t)
  }
}

用法

假设您有以下Java接口:

public interface Fooable {
    public String getFoo();
}

public class Foo implements Fooable {
    public String getFoo() { 
        return null; 
    }
}

在您的Scala代码中:

import Implicits._

val foo = new Foo()
val myOptionalValue = foo.getFoo.optional //returns an Option[String],in this case None because getFoo returns null
原文链接:https://www.f2er.com/java/128730.html

猜你在找的Java相关文章