4

を含むコードをコンパイルしようとしました

class FixedIndexedRepository(override val name: java.lang.String, location: URI) extends FixedIndexedRepo

FixedIndexedRepoJava クラスを拡張するもの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

これを修正する方法は?なにが問題ですか?

4

1 に答える 1

1

レックスは醜いと言います:

継承された保護された Java フィールドからパブリック アクセサーを作成する

与えられた:

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 コンパイラはエラーで停止します

つまり、幸いなことに、エラーで停止します。

于 2013-05-17T22:02:59.743 に答える