如何在scala代码中引用MyClass :: new?

时间:2018-01-23 09:15:00

标签: java scala

这是java版本:

Optional<Object> optionalFramework = Optional.empty();

optionalFramework.orElseThrow(IllegalStateException::new);

如何在scala中重写它? (注意 使用java.util.Optional而不是scala Option)如何替换scala中的IllegalStateException::new

1 个答案:

答案 0 :(得分:2)

如果您使用的是Scala 2.12.x,则可以使用SAM type

val a = Optional.of(10)
a.orElseThrow(() => new IllegalStateException("Can't do that"))

否则,您需要实现完整的Supplier界面:

a.orElseThrow(new Supplier[Throwable] {
  override def get(): Throwable = new IllegalStateException("Nope")
})

Scala中没有与Method Reference相同的语法,它类似于lambda表达式的语法,但并不完全。