在case类或伴随对象中声明方法是否“更干净”(相应的更好的性能)?
e.g。
case class My(a:A) {
def m(args) = {...}
}
or
object My {
def m(m:My, args) = {...}
}
答案 0 :(得分:7)
我更愿意将方法放在case类中。将它放在伴侣对象听起来像Anemic Domain Model反模式AnemicDomainModel。
此外,您可以稍后覆盖案例类方法,或者扩展和混合一些特征。
答案 1 :(得分:5)
最好将方法放在case类中;完全没有课程的全部意义吗? object
是静态的,通常是方法的不良位置,因为这意味着他们需要再多拿一个参数。我希望类中的方法执行得非常好一点,因为不需要加载伴随对象实例(更一般地,它更接近JVM优化的样式),但是这个在任何真正的程序中,几乎可以肯定的是,这个区别太小了。当然没有规则是绝对的;如果你发现一个特定的方法似乎更适合于伴侣对象,那么无论如何都要把它放在那里。