- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
密封类的主要原因似乎是因为这允许编译器在对这些类进行模式匹配时进行彻底的搜索。说我有用于模式匹配的数据类型。玩具示例:
sealed trait Statement
case class Assign(name: String, value: Int) extends Statement
case class Print(name: String) extends Statement
case class IfZero(name: String, thenn: Statement, els: Option[Statement]) extends Statement
case class Block(statements: List[Statement]) extends Statement
def execute(statement: Statement): Unit = statement match {
case Assign(name, value) => ???
case Print(name) => ???
case IfZero(name, thenn, els) => ???
case Block(statements) => statements foreach { execute(_) }
}
Statement
特性是
sealed
,这样,如果我忘记了match语句中的一种语句,编译器就可以警告我。但是案例类呢?案例类不能彼此继承,但是特征类和普通类可以继承。那么,密封案例类也是一种好习惯吗?如果我不这样做怎么办?
最佳答案
您不必密封案例类,但应将它们标记为final
,因此禁止任何进一步的继承关系。仅当您要对其子类进行详尽检查时,使它们密封才有用,而这不是很可能的用例。
默认情况下,将所有类标记为final
是一件好事,因为它禁止您的API的用户在覆盖这些类的方法时更改这些类的行为。如果您没有专门设计要子类化的类,则子类化可能会导致应用程序中的错误,因为子类化的类不再执行预期的工作。
关于scala - 密封案例类是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31128383/
当数据类扩展包含非抽象 open val 属性的密封类时,生成的子数据类包含与父类的私有(private)字段重复的私有(private)字段。 sealed class Foo(open val f
当封装一个.jar 文件(整个.jar,而不是特定的包)时,实际上封装了哪些包?它只是包含.class 文件的包,还是还包含父包和子包? 举个例子,假设我有一个包含单个 .class 文件 com.c
我可以很容易地为这样的密封案例类族一般派生一个编解码器: import io.circe._ import io.circe.generic.auto._ sealed trait Base case
我有一个类层次结构: class C1 { virtual object M1(); } class C2: C1 { override sealed object M1(); } class C3:
有什么区别: type MovieType = {| +blob?: string, +name: string, +url?: string |}; 和 type MovieType =
想象一个这样的 secret : apiVersion: v1 kind: Secret metadata: name: {{ include "test-cicd.fullname" . }}
因此,我的一位开发人员使用这样的函数为 Magento 电子商务网站制作自定义导航: getUrl() ?>">__('about') ?> 唯一的问题是它的输出如下: about 据我了解,如果同时
我是一名优秀的程序员,十分优秀!