Scala / IntelliJ:案例对象X与案例类X对案例类X()

时间:2015-11-20 10:52:11

标签: scala intellij-idea case-class

Scala中有案例类:

case class X(one: One, two: two)

有些对象只有一个实例(有意义):

case object X

当我声明一个没有参数的case类时,IntelliJ做了正确的事情并且弃用 - 警告我将它作为case对象:

case class X // deprecated stuff

然而,它没有警告我

case class X()

这让我想知道case class Xcase class X()之间是否存在差异?

2 个答案:

答案 0 :(得分:4)

我不知道您使用的Scala版本,但在2.11中,这不仅被弃用,而且确实是错误:

 Error:(34, 17) case classes without a parameter list are not allowed;
 use either case objects or case classes with an explicit `()' 
 as a parameter list.
   case class Foo
                 ^

简单地说,你不能对无参数列表的案例类进行模式匹配,所以对它们没用。

case class Foo()

def test(in: Any) = in match {
  case Foo() => "foo"
  case _     => "other"
}

答案 1 :(得分:3)

声明案例对象时,只创建一个实例。但是,您可以拥有无​​参数案例类的多个不同实例。为什么你可能想要这是另一回事。

原则上,case class Foocase class Foo()之间没有区别。我认为前者已被弃用,因为无意中滥用它是多么容易。这个post很好地说明了这一点。