簡體   English   中英

使用可選參數從Java訪問Scala的case類

[英]Access scala's case class from java with optional parameters

我有一個帶有可選參數的case類。 如果未定義參數,則應將其設置為默認值。 例如:

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

當我嘗試從Java訪問此case類時,就會出現問題:

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

它不會將默認值100分配給變量bar

您可以通過以下方式使用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)
  }
}

你可以這樣做:

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

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

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

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM