1

我对 Scala 很陌生,但我已经使用过案例类。我了解这里总结的常规课程和案例课程之间的主要区别是什么总结的常规课程和案例课程之间的主要区别是什么。

我什至不想摆脱案例类,但我想知道转换所需的代码是什么,例如:

class Tweet(val user: String, val text: String) {
  override def toString: String =
    "User: " + user + "\n" +
    "Text: " + text + "]"
}

成一个完整的案例“兼容”类。我的意思是,我想编写一个案例类的相同“行为”,但不使用case关键字。这是可能的还是编译器做了一些我无法通过代码得到的事情(不包括优化)?

再次说明我在问什么,当我需要一个案例类时,我总是会使用 case 关键字,但是在一生中,我想知道 Scala 编译器(一般意义上)为我做了什么,用代码术语。

编辑: 另一个疑问:编译器会以某种方式标记我的手工编码类与标准案例类,以便我可以观察到执行中的不同行为吗?

4

1 回答 1

4

您可以查看 scala 规范中的第 5.3.2 章“案例类”。

如果我总结正确,以下是自动生成的:

  • 为类元素生成访问器
  • 自动生成具有应用/取消应用的提取器对象
  • 自动添加方法副本
  • 方法 equals、hashCode、toString 被覆盖

您可以比较 scala 源代码和生成的 java 字节码来确定。

于 2013-11-03T19:28:05.377 回答