当前位置:  开发笔记 > 编程语言 > 正文

为什么不应该专门使用案例类?

如何解决《为什么不应该专门使用案例类?》经验,为你挑选了1个好方法。

为什么不应该专门使用案例类?

毕竟,他们提倡不变性,模式匹配访问方法等?



1> Rüdiger Klae..:

人们经常使用案例类,然后尝试自定义/滥用它们来做除了案例类应该做的其他事情.

例如,如果你想

使一些领域私有化

自定义equality/hashCode

有可变状态

在构造实例时强制执行不变量

你应该使用普通的类,即使你需要输入更多.

对纯,不可变和公共数据使用案例类.基本上是一个带有命名元素的元组,仅此而已.使用普通类来处理可变资源的句柄(文件,GUI控件等)

人们经常认为你可以滥用案例类来完成为普通课程保留的任务.以下是一些滥用案例类的例子:

私人会员

案例类的成员永远不会是私有的

case class Foo(x: Int, private val y: String)
val x = Foo(1, "Secret")
x.y // does not work, because y is private
x.productElement(1) // still does work
Foo.unapply(Foo(1,2)).get._2 // another, more typesafe way to get at the private fields

私人构造函数

您可能认为通过使构造函数成为私有,可以强制执行不变量.在下面的示例中,您可能认为创建min> max的范围是不可能的.

case class Range private (min: Int, max: Int)
object Range {
  def create(a: Int, b: Int): Range =
    if(a < b) new Range(a, b) else new Range(b, a)     
}

但事实并非如此:

scala> val wrong = Range.create(2,1).copy(min = 1000)
wrong: Range = Range(1000,2)

您还必须覆盖复制方法.当你把它变得非常无懈可击时,你也可以使用普通的课程.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有