Scala 中的“case class extends trait”是什么意思?

Sun*_*Sun 0 oop inheritance scala traits case-class

我了解我现有的项目,有几件事我无法理解:

trait PeriodA {
  def start: Long
  def stop: Long
  def description: String
  def manageTo: String
}

case class PeriodEntity(
  start: Long,
  stop: Long,
  description: String,
  manageTo: String)
  extends PeriodA
Run Code Online (Sandbox Code Playgroud)

你能解释一下这里发生了什么吗?

Str*_*nye 6

一步步:

  • trait PeriodA {– 特性的定义(大致是一个接口 – 为了进一步理解,请阅读规范

  • def start: Long def stop: Long def description: String def manageTo: String– 特性的“随叫随到”评估属性的定义。您可以将它们视为 JavagetFieldName函数。

  • case class PeriodEntity“案例类”的定义比一般类稍微复杂一些。简而言之,该定义使编译器隐式地为定义的val每个所谓的“元素”(字段)添加前缀。它还定义了带有apply/unapply函数对的伴随对象,这在您想使用模式匹配时会派上用场,但这超出了当前的主题。案例类规范

  • start: Long, stop: Long, description: String, manageTo: String– 构造函数参数和类字段的定义,称为“元素”。至于编译器隐式标记带有val前缀的元素,它们应该被视为不可变的。正如前面提到的,它们可以被视为获取访问器。

  • extends PeriodA- 声明该类PeriodEntity混合(实现)PeriodA接口。就编译器隐式地将 case 类元素视为 val 而言,无需显式实现或覆盖抽象PeriodA方法 - 编译器会将元素视为您的默认实现。