假设案例类是代数类型,因此有些人反对在案例类中添加方法。
有人可以举一个为什么这个主意不好的例子吗?
最佳答案
这是导致更多问题的那些问题之一。
以下是我对此的看法。
让我们看看定义案例类时会发生什么,
Scala编译器执行以下操作,
apply
方法。这让您创建没有
new
关键字的类的实例。 val
前缀所有参数。即。使它成为不变的hashCode
,equals
和toString
的实现unapply
方法,case类支持pattern matching
。当定义Algebraic Data Type
时,这一点很重要。accessors
。请注意,它不会生成“mutators” 现在,我们可以看到案例类不是Java Bean的完全对等对象。
案例类倾向于表示
Datatype
而不是表示entity
。我认为它们是程序员的好朋友,因为它减少了无尽的吸气剂,覆盖相等和哈希码方法等的样板。
现在来提一个问题,
如果您从函数式编程的角度来看它,那么案例类是必经之路,因为您将看到不可变性,相等性,并且可以确定
case class
表示一个数据结构。在很多时候,使用FP编程的人都说要在ADT中使用它们。如果您的案例类具有适用于该类的
state
的逻辑,则对于函数式编程而言,这是一个不好的选择。我更倾向于在需要确定一个类来表示数据结构的情况下使用案例类,因为那是我在自动生成的方法的帮助下获得的附加信息,以及
patter-matching
的其他优点。当我以带有副作用的OO方式编程时,可变状态我使用class
。话虽如此,在某些情况下,您仍然可以使用
utlity
方法创建一个案例类。我只是认为这些机会较少。关于scala - 将方法添加到Scala案例类是个好主意吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37061636/