对象在 Scala 中扩展其伴生案例类

pla*_*pus 5 scala playframework

举个例子,在 Play 框架中,

您会在包 play.api.libs.json 中看到一个案例类 JsPath 及其定义如下的伴生对象

case class JsPath(path: List[PathNode] = immutable.this.Nil) extends Product with Serializable

object JsPath extends JsPath
Run Code Online (Sandbox Code Playgroud)

一般来说,当您使用其伴随案例类扩展对象时,您会获得什么好处?

gzm*_*zm0 2

JsPath除了一些混乱以及您可以将对象用作空之外,没有任何好处JsPath。如果您需要一个空对象,那么给它一个单独的名称(相当于Lists Nil)可能会更具可读性:

object EmptyJsPath extends JsPath(Nil)
Run Code Online (Sandbox Code Playgroud)

empty或者您在同伴上定义一个方法(就像大多数其他集合类所做的那样):

object JsPath {
  def empty = ...
}
Run Code Online (Sandbox Code Playgroud)