当我通过 Eclipse 重命名 .scala 文件时,类名本身没有重命名。
这是预期的行为吗?它似乎没有破坏任何东西。
我希望它被重命名,来自 Java 背景,文件名/类名必须彼此相等。
最佳答案
scala 中不需要类名和文件名之间的对应关系。
您可以(并且通常会)在每个 Scala 文件中定义多种类型。
编译器将尝试为每个公共(public)类型创建一个不同的 .class 文件,文件名与类型名称对应,以实现与 java 的互操作性(对于在 java 中没有直接对应关系的复杂或嵌套类型,scalac 将生成 .具有奇怪/错误名称的类文件...)
关于为什么不强制执行此对应关系的一些说明(可能不是完整列表,只是为了给您一个想法):
case class Foo(foo:String)
对应于一个完整且有些复杂的 java 类,但将它放在自己的文件中似乎很浪费...... trait Fooer {def foo="foo"}
可以转换为各种类似 java 的类型,这些类型实现了 trait 的“具有默认实现的接口(interface)”性质。对于 Scala 语法允许并在一些常见 Scala 模式中使用的嵌套对象/类/类型,情况变得更糟。