Scala 无法覆盖java.lang.String字段。怎么了?

Scala 无法覆盖java.lang.String字段。怎么了?,scala,scala-2.9,Scala,Scala 2.9,我试图编译包含 class FixedIndexedRepository(override val name: java.lang.String, location: URI) extends FixedIndexedRepo 它扩展了FixedIndexedReporto它扩展了Java类AbstractIndexedReporto public abstract class AbstractIndexedRepo implements RegistryPlugin, Plugin, Rem

我试图编译包含

class FixedIndexedRepository(override val name: java.lang.String, location: URI) extends FixedIndexedRepo
它扩展了
FixedIndexedReporto
它扩展了Java类
AbstractIndexedReporto

public abstract class AbstractIndexedRepo implements RegistryPlugin, Plugin, RemoteRepositoryPlugin, IndexProvider, Repository {
...
protected String name = this.getClass().getName();
...
不幸的是,Scala 2.9.2编译器因以下错误而停止:

.../FixedIndexedRepository.scala:29: overriding variable name in class AbstractIndexedRepo of type java.lang.String;
[error]  value name has incompatible type
[error] class FixedIndexedRepository(override val name: java.lang.String, location: URI) extends FixedIndexedRepo
如何解决这个问题?怎么了?

雷克斯说它很丑:

鉴于:

package j;

public class HasName {
    protected String name = "name";
}
那么,冒牌货是:

package user

private[user] class HasNameAdapter extends j.HasName {
  protected def named: String = name
  protected def named_=(s: String) { name = s }
}

class User(n: String = "nom") extends HasNameAdapter {
  def name(): String = named
  def name_=(s: String) { this named_= s }
  this name_= n
}

object Test extends App {
  val u = new User("bob")
  Console println s"user ${u.name()}"
  Console println s"user ${u.name}"
}
你被预先警告过丑陋的人

我也没有完全弄清楚细节,但周末就要到了

不幸的是,Scala 2.9.2编译器因错误而停止


你的意思是,幸运的是,它停止时出现了一个错误。

我正在努力重现这一点。你能提供一段代码来单独产生这个问题吗?非常感谢。我不想考虑内部机制。