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

cba*_*tin 8 scala case-class

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

例如

case class My(a:A) {
    def m(args) = {...}
}
or
object My {
    def m(m:My, args) = {...}
}
Run Code Online (Sandbox Code Playgroud)

Prz*_*mek 7

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

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


lmm*_*lmm 5

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