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编译器因错误而停止
你的意思是,幸运的是,它停止时出现了一个错误。我正在努力重现这一点。你能提供一段代码来单独产生这个问题吗?非常感谢。我不想考虑内部机制。