是否适合定义一个非平凡的Scala案例类?

Dav*_*vid 8 scala

我今天定义了一个Scala类,我认为"我需要一个equals方法和一个hashCode方法;一个copy方法也很方便.我会把它变成一个案例类." 我的班级已经有了许多其他代码,并不是微不足道的.

很好,它都可以工作,但是当教科书处理案例类时,所有的例子都将它们定义为用作值类或"数据传输对象".定义一个非平凡的案例类是否合适?上面描述的思维过程是否正常,或者我是否需要以不同的方式考虑案例类?

Dan*_*ral 10

一个case class提供,equals,hashCodetoString基于主构造函数参数的方法,所有这一切都变成val了.此外,对象伴侣再次基于主构造函数参数获取a applyunapply方法.

此外,case class继承Serializable和来自Product,不应由其他类扩展.

如果所有这些事情都适合您的课程,那么请随意将其声明为"案例类".


Ale*_*nov 6

如果它没有后代,请随意.扩展案例类是个坏主意.

  • 并且已被弃用.scala> case class Bar(override val x:String)extends Foo("Some string")<console>:7:warning:case class`class Bar'case case ancestor`class Foo'.这已被弃用,因为使用和实现过于复杂.您应该使用提取器在非叶节点上进行模式匹配.case类Bar(覆盖val x:String)扩展Foo("Some string") (4认同)