案例类假设是代数类型,因此有些人反对向案例类添加方法。 有人可以举个例子说明为什么这是一个坏主意?
答案 0 :(得分:1)
这是导致更多问题的问题之一。 以下是我对此的看法。
让我们看看定义案例类时会发生什么, Scala编译器执行以下操作,
apply
方法。这让我们
您创建没有new
关键字的类的实例。val
前缀所有参数。即。使它不可改变hashCode
,equals
和toString
unapply
方法,案例类支持pattern matching
。定义Algebraic Data Type
时,这很重要。
accessors
。请注意,它不会生成“mutators”现在我们可以看到案例类不是Java Bean的精确对等体。
案例类往往代表Datatype
代表entity
。
我认为它们是程序员的好朋友,因为它减少了无穷无尽的getter的锅炉板,覆盖了equals和hashcode方法等。
现在回答这个问题,
如果从功能编程的角度来看它,那么案例类就是可行的方法,因为你会考虑不变性,相等性,并且你确信case class
代表了一个数据结构。在这里,人们在FP中编程的很多时候都说将它们用于ADT。
如果你的case类具有适用于类state
的逻辑,那么这对于函数式编程来说是一个糟糕的选择。
我更喜欢使用案例类来确定我需要一个类来表示数据结构的场景,因为这样我可以获得自动生成方法的帮助以及patter-matching
的附加优势。当我以带有副作用的OO方式编程时,可变状态我使用class
。
尽管如此,仍然可能存在使用utlity
方法的案例类的情况。我认为这些机会较少。