13

私は最近、自分自身に言語を教えようとして、いくつかのコードをJavaからscalaに変換しています。

このscalaクラスがあるとします。

class Person() {
  var name:String = "joebob"
}

今、私はJavaからアクセスしたいので、scalaにいる場合のようにドット表記を使用することはできません。

したがって、次のように発行することで、変数の内容を取得できます。

person = Person.new();
System.out.println(person.name());

次の方法で設定します。

person = Person.new();
person.name_$eq("sallysue");
System.out.println(person.name());

これは、私たちのPersonクラスがjavapで次のように見えるために当てはまります。

Compiled from "Person.scala"
public class Person extends java.lang.Object implements scala.ScalaObject{
    public Person();
    public void name_$eq(java.lang.String);
    public java.lang.String name();
}

はい、私は自分のゲッター/セッターを書くことができましたが、クラスをそれで満たすことは嫌いであり、すでにそれらを持っていることを考えるとあまり意味がありません-私は_$eqメソッドをより良くエイリアスしたいだけです。(これは、antlrのようなものを扱っている場合、実際にはさらに悪化します。これは、それをエスケープする必要があり、person.name _ \ $ eq( "newname");のようになってしまうためです。

注:クラスをより多くのセッターメソッドで満たすのではなく、これに我慢する必要があります。

では、この状況であなたはどうしますか?

4

1 に答える 1

17

Scala の Bean プロパティ アノテーションを使用できます。

class Person() {
  @scala.reflect.BeanProperty
  var name:String = "joebob"
}

これにより、getName と setName が生成されます (javabeans を必要とする Java ライブラリとやり取りする必要がある場合に便利です)。

于 2010-03-12T19:22:19.090 に答える