2011-09-11 9 views
10

scala.runtimeディレクトリのScalaのソースツリーには、いくつかの* .javaファイルがあります。scala.runtimeにあるこれらのJavaファイルの目的は何ですか?

これらのファイルは非常に単純なようです。 g。 DoubleRef.javaは次のようになります。

package scala.runtime; 

public class DoubleRef implements java.io.Serializable { 
    private static final long serialVersionUID = 8304402127373655534L; 

    public double elem; 
    public DoubleRef(double elem) { this.elem = elem; } 
    public String toString() { return java.lang.Double.toString(elem); } 
} 

それらのクラスをScalaで定義することができない理由はいかなる理由がありますか?

+1

まあまあです。私の静的フィールドにコンパイルするScalaのコンストラクタはありません。これはjava.io.Serializableが正しく動作するために必要なのでしょうか? –

+2

@Brian:代わりに '@ SerialVersionUID'アノテーションを使用します。 – soc

答えて

5

パブリックフィールドにコンパイルされたScalaコンストラクトはありません。スカラーのpublic varは、プライベートフィールドとパブリックアクセサとミューテータにコンパイルされます。それらの*Refクラスが広く使用されていると想像しているように、これは頻繁なメソッド呼び出しを避け、直接フィールドアクセスで置き換える最適化です。

+0

それはそう考えられますが、それらのメソッドを宣言しないと、最終的にJavaがそれらを最適化することによって同じ効果が得られますか? – Owen

+0

私は分かりません - 多分、ここで最適化を行う人(コンパイラまたはJVM)を必要としないことです。 –

関連する問題