我试图编译包含的代码
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 举报,一经查实,本站将立刻删除。