2

Scalaのクラスパラメータをどのように理解しますか。コンパイラは、クラスパラメータのクラスに暗黙のフィールドを追加しますか?好き

    class Rational(n:Int, d:Int){
        val num = n
        val den = d
        override def toString = n + "/" + d
    }

クラスRational(n、d、num、den)に4つのフィールドがありますか?そうでない場合、メソッドtoStringのnとdにアクセスするにはどうすればよいですか。この背後にあるメカニズムは何ですか?

4

1 に答える 1

3

nコンストラクターでのみ使用されない限り、フィールドにdなりprivateます。コンストラクターでのみ使用される場合は、最適化されます。フィールドにもなりますが、アクセサーも取得numdenます。privatepublic

これを試して:

class Test(a: String) {
  println(a)
}

次に、コンパイルして実行しますjavap -private Test。これにより、すべてのクラスとクラスのメンバーが表示されます。

public class Test extends java.lang.Object{
    public Test(java.lang.String);
}

次に、そのパラメーターを使用するメソッドを試してください。

class Test(a: String) {
  println(a)
  def printa { println(a) }
}

public class Test extends java.lang.Object{
    private final java.lang.String a;        // <- private field
    public void printa();
    public Test(java.lang.String);
}
于 2012-08-28T01:14:34.907 に答える