我试图编译包含的代码
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
你的意思是,幸运的是它会因错误而停止.