scala – 无法覆盖java.lang.String字段.怎么了?

我试图编译包含的代码

class FixedindexedRepository(override val name: java.lang.String,location: URI) extends FixedindexedRepo

其中扩展了FixedindexedRepo,它扩展了java类AbstractIndexedRepo

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

如何解决这个问题?怎么了?

解决方法

雷克斯说这很难看:

Making a public accessor from an inherited protected Java field

鉴于:

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}"
}

你被预先警告了丑陋.

我也没有详细说明细节,但周末即将到来.

Unfortunately Scala 2.9.2 compiler stops with an error

你的意思是,幸运的是它会因错误而停止.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...