scala方法名称作为变量名称

vin*_*hou 0 scala

我想定义case class demo(notify: String),但我的IDE(IntelliJ IDEA)抱怨"通知不能覆盖最终成员".

我知道这notify是一个成员方法,AnyRefIDE可能会混淆方法名称的变量名称.我需要一个notify领域,我该怎么做?

Ben*_*ich 6

这不是IDE的问题.Scala类不能有冲突的符号,无论它们是方法还是字段.例如,以下内容将无法编译:

class Foo {
    val bar = 1
    def bar() = "bar"
}
Run Code Online (Sandbox Code Playgroud)

notify是定义的AnyRef,而且它是final,所以你在这里没有任何很好的选择!

当然,您可以将变量命名为不同的名称:

case class Foo(_notify: String)
Run Code Online (Sandbox Code Playgroud)

如果你坚持使用变量名,你也可以扩展AnyVal,但前提是你只有一个val参数:

case class Foo(notify: String) extends AnyVal
Run Code Online (Sandbox Code Playgroud)

您可能正在寻找允许您使用严重重音来转义关键字的功能:

case class Foo(`val`: String)
Run Code Online (Sandbox Code Playgroud)

这将允许您使用关键字(以及一些其他通常非法的变量名称)作为变量名称.这不适用于您的示例,因为notify它不是关键字 - 它是类中已经使用过的符号!

您还可以提出一个notify对类非常私有的解决方案,但这不适用于案例类或最合理的用例.