![](/img/trans.png)
[英]Compiler error when declaring a variable inside if condition and no curly braces
[英]Declaring A Trait With A Variable Named Wait Gives Override Compiler Error
鉴于以下特征:
trait Foo {
final val wait = "wait"
}
在编译时,它会发出以下覆盖编译器错误:
Value 'wait' cannot override final member
如上所述在特征内声明变量似乎与Object
class 中的以下 Java 方法发生冲突:
public final void wait() throws InterruptedException {
this.wait(0L);
}
这是错误还是期望的行为?
wait
是在Object
上的 Object 中定义的final
方法。 任何其他 object 扩展java.lang.Object
,因此您不能覆盖/定义final
的方法。
这是意料之中的,否则如果您尝试在 Java 代码中使用wait
和notify
,其中 object 来自用 Scala 编写的部分代码,您最终会出现奇怪的行为。 实际上,Scala 试图持有 Java 定义为安全的所有合约。
在这个答案中,您会看到val
字段实际上还使用字段名称创建了一个 getter 方法 - 在您的情况下为wait()
。 由于这与Object
上的最终wait()
方法相冲突,这确实是意料之中的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.