scala case类把方法放在伴侣对象中?

时间:2014-12-29 20:11:13

标签: scala case-class

在case类或伴随对象中声明方法是否“更干净”(相应的更好的性能)?

e.g。

case class My(a:A) {
    def m(args) = {...}
}
or
object My {
    def m(m:My, args) = {...}
}

2 个答案:

答案 0 :(得分:7)

我更愿意将方法放在case类中。将它放在伴侣对象听起来像Anemic Domain Model反模式AnemicDomainModel

此外,您可以稍后覆盖案例类方法,或者扩展和混合一些特征。

答案 1 :(得分:5)

最好将方法放在case类中;完全没有课程的全部意义吗? object是静态的,通常是方法的不良位置,因为这意味着他们需要再多拿一个参数。我希望类中的方法执行得非常好一点,因为不需要加载伴随对象实例(更一般地,它更接近JVM优化的样式),但是这个在任何真正的程序中,几乎可以肯定的是,这个区别太小了。当然没有规则是绝对的;如果你发现一个特定的方法似乎更适合于伴侣对象,那么无论如何都要把它放在那里。