微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐