当我通过 Eclipse 重命名 .scala 文件时,类名本身没有重命名。

这是预期的行为吗?它似乎没有破坏任何东西。

我希望它被重命名,来自 Java 背景,文件名/类名必须彼此相等。

最佳答案

scala 中不需要类名和文件名之间的对应关系。
您可以(并且通常会)在每个 Scala 文件中定义多种类型。
编译器将尝试为每个公共(public)类型创建一个不同的 .class 文件,文件名与类型名称对应,以实现与 java 的互操作性(对于在 java 中没有直接对应关系的复杂或嵌套类型,scalac 将生成 .具有奇怪/错误名称的类文件...)

关于为什么不强制执行此对应关系的一些说明(可能不是完整列表,只是为了给您一个想法):

  • 考虑到 Scala 的简洁性,这会很浪费。 case class Foo(foo:String) 对应于一个完整且有些复杂的 java 类,但将它放在自己的文件中似乎很浪费......
  • 会降低代码可读性。有时,您定义案例类的层次结构,它们对应于(例如)发送给参与者的各种消息。让他们在一起强调了他们的意图。
  • 通常是没有意义的。 scala 中相对简单的定义,如 trait Fooer {def foo="foo"} 可以转换为各种类似 java 的类型,这些类型实现了 trait 的“具有默认实现的接口(interface)”性质。对于 Scala 语法允许并在一些常见 Scala 模式中使用的嵌套对象/类/类型,情况变得更糟。
  • 有 Scala 语义(特别是密封特征)实际上需要在单个文件中定义多个类(归功于@DaveGriffith 在下面的评论)
  • 10-07 16:13
    查看更多