案例类中的静态函数(Scala)

时间:2015-11-18 08:09:59

标签: scala static-methods case-class

我在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

我怎样才能让它发挥作用?感谢

1 个答案:

答案 0 :(得分:12)

在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))