使用可选参数

时间:2017-11-02 00:13:00

标签: java scala case-class

我有一个具有可选参数的案例类。如果未定义参数,则应将其设置为某个默认值。 例如:

case class Foo(bar: Option[Int] = Some(100))

当我尝试从Java访问此案例类时出现问题:

Foo foo = new Foo(Option.empty())

它不会将默认值100分配给变量bar

2 个答案:

答案 0 :(得分:0)

您可以使用apply()方法以下列方式获取具有默认参数的类的实例:

object Foo{
  def getDefault: Foo = new Foo
}

在Java中可以这样使用:

Foo.getDefault()

或者如果您有多个默认参数,则必须使用这样的构建器模式:

case class Foo(a: Int = 1, b: Option[Int] = None, c: String = "Hello")

object Foo{
  class Builder{
    var a = 1
    var b = None
    var c = "Hello"
    def withA(x: Int) = {a = x; this}
    def withB(x: Some) = {b = x; this}
    def withC(x: String) = {c = x; this}
    def build = Foo(a,b,c)
  }
}

答案 1 :(得分:0)

你可以这样做:

case class Foo(bar: Option[Int]) {
  def this() = this(Some(100))
} 

如果您在scala工作表中使用以下命令运行它:

object Foo{
  val a = new Foo()                         //> a  : week3.Foo = Foo(Some(100))
}

希望这有帮助