带括号和不带括号的案例类之间的区别

时间:2020-02-17 13:08:14

标签: scala case-class

我有一个案例类case class FOO。并且想测试一种方法myMethod,该方法在给定参数值FOO()的情况下返回value1

我有一个类似myMethod(value1) should equal FOO的测试。

测试失败,并显示FOO did not equal FOO()

FOOFOO()有什么区别?

1 个答案:

答案 0 :(得分:6)

case class Foo()变成了等价的

class Foo() extends Product with Serializable {
  // some methods
}

object Foo extends (() => Foo) with Serializable {
  // some methods
}

因此Foo()创建了Foo类的实例,而Foo是对Foo伴随对象的引用。

但是,如果案例类Foo没有参数,则应考虑将其设为 case对象。如果您不滥用内部可变状态的case类[1],那么所有Foo()实例都应该是无法区分的。

[1]如果是,请考虑使用常规类。

相关问题