case class 带括号和不带括号的区别
Difference between case class with parentheses and without
我有一个案例classcase class FOO
。并想测试一个方法 myMethod
returns FOO()
给定参数值 value1
.
我有这样的测试:myMethod(value1) should equal FOO
。
测试失败 FOO did not equal FOO()
。
FOO
和 FOO()
和有什么不一样?
A case class Foo()
脱糖成等同于
的东西
class Foo() extends Product with Serializable {
// some methods
}
object Foo extends (() => Foo) with Serializable {
// some methods
}
因此 Foo()
创建了 Foo 的实例 class 而 Foo
是对 Foo 伴生对象的引用。
但是,如果您的案例 class Foo
没有参数,您应该考虑将其设为 案例对象。如果您没有滥用带有内部可变状态 [1] 的案例 class,则所有 Foo()
实例无论如何都应该无法区分。
[1] 如果是,请考虑改用常规 class。
我有一个案例classcase class FOO
。并想测试一个方法 myMethod
returns FOO()
给定参数值 value1
.
我有这样的测试:myMethod(value1) should equal FOO
。
测试失败 FOO did not equal FOO()
。
FOO
和 FOO()
和有什么不一样?
A case class Foo()
脱糖成等同于
class Foo() extends Product with Serializable {
// some methods
}
object Foo extends (() => Foo) with Serializable {
// some methods
}
因此 Foo()
创建了 Foo 的实例 class 而 Foo
是对 Foo 伴生对象的引用。
但是,如果您的案例 class Foo
没有参数,您应该考虑将其设为 案例对象。如果您没有滥用带有内部可变状态 [1] 的案例 class,则所有 Foo()
实例无论如何都应该无法区分。
[1] 如果是,请考虑改用常规 class。