簡體   English   中英

案例類中的靜態函數(Scala)

[英]Static function in case class (Scala)

我在Scala應用程序中有一個case類,並且我更喜歡在該類中編寫靜態函數,因為它最有意義。 這是班級:

case class At (
    date : DateTime,
    id : String,
    location : Coordinate
)
{
...

   def getParsedValues(line : String) : At =
   {
      val mappedFields : Array[String] = Utils.splitFields(line)
      val atObject = new At(mappedFields)
      return atObject;
   }

...
}

然后從另一個Scala對象,我想將方法getParsedValues()稱為靜態方法:

object Reader{
...
    var atObject = At.getParsedValues(line)
...
}

但它得到一個錯誤value getParsedEvent is not a member of object At

我怎樣才能使它工作? 謝謝

在Scala中編寫等效的Java靜態方法的標准方法是將該方法添加到類的伴隨對象中。 所以:

case class At (
    date : DateTime,
    id : String,
    location : Coordinate
)

object At
{
...

   def getParsedValues(line : String) : At =
   {
      val mappedFields : Array[String] = Utils.splitFields(line)
      val atObject = new At(mappedFields)
      return atObject;
   }

...
}

然后像在Reader對象中那樣調用它。

此外,您可能需要的構造函數變量可以更好地將Array[String]編碼為同一個伴隨對象中的工廠方法。 然后,“靜態”方法的中間行將刪除new關鍵字。 此外,您可以將賦值放到atObjectreturn atObject行 - 方法的最后一個表達式的結果將自動作為方法的返回值。 實際上,整個方法可以寫成:

def getParsedValues(line: String): At = At(Utils.splitFields(line))

暫無
暫無

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

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