Scala中有案例类:
case class X(one: One, two: two)
有些对象只有一个实例(有意义):
case object X
当我声明一个没有参数的case类时,IntelliJ做了正确的事情并且弃用 - 警告我将它作为case对象:
case class X // deprecated stuff
然而,它没有警告我
case class X()
这让我想知道case class X
和case class X()
之间是否存在差异?
答案 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 Foo
和case class Foo()
之间没有区别。我认为前者已被弃用,因为无意中滥用它是多么容易。这个post很好地说明了这一点。