Scala案例类背后的内容是什么?

时间:2013-11-03 19:13:20

标签: scala

我对Scala很新,但我已经使用过case类。我理解常规类和案例类之间的主要区别是汇总here

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

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

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

再一次明确我要问的是,当我需要一个案例类时,我将始终使用case关键字,但是在生命中,我想知道Scala编译器(在一般意义上)对我有什么作用,用代码术语表示。

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

1 个答案:

答案 0 :(得分:4)

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

如果我正确总结,则会自动生成以下内容:

  • 为类元素生成访问器
  • 自动生成带有apply / unapply的提取器对象
  • 自动添加方法副本
  • 方法等于,hashCode,toString被覆盖

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