2011-09-11 70 views
10

scala.runtime目錄中的Scala的源代碼樹中有幾個* .java文件。這些Java文件在scala.runtime中的用途是什麼?

這些文件似乎很簡單,例如, 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構造器編譯爲公共字段 - Scala中的public var s編譯爲專用字段和公共訪問器和增變器。正如我想象那些類被廣泛使用,這可能是一種優化,以避免頻繁的方法調用,並用直接的字段訪問替換它們。

+0

這聽起來似乎是合理的,但是不會通過讓Java優化它們來聲明這些方法「最終」獲得相同的效果? – Owen

+0

我不知道 - 也許這個想法是不要求任何人(編譯器或JVM)在這裏做任何優化... –