2011-09-11 16 views
10

Có một vài tệp * .java trong cây nguồn của Scala trong thư mục scala.runtime.Mục đích của các tệp Java này trong scala.runtime là gì?

Các tệp đó dường như rất đơn giản, e. g. DoubleRef.java trông giống như sau:

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); } 
} 

Có lý do nào khiến các lớp đó không được xác định trong Scala không?

+1

Chỉ cần đoán. Không có cấu trúc Scala nào sẽ biên dịch thành trường tĩnh riêng tư, và có lẽ điều này được yêu cầu bởi java.io.Serializable để hoạt động chính xác? –

+2

@Brian: Thay vào đó, bạn sẽ sử dụng chú thích '@ SerialVersionUID'. – soc

Trả lời

5

Chỉ cần đoán: không có cấu trúc Scala nào biên dịch thành trường công khai - công khai var s trong Scala biên dịch thành trường riêng tư và cho người truy cập công khai và trình tắt. Như tôi tưởng tượng rằng các lớp *Ref được sử dụng rộng rãi, điều này có thể là một tối ưu hóa để tránh các cuộc gọi phương thức thường xuyên và thay thế chúng bằng truy cập trực tiếp.

+0

Điều đó nghe có vẻ hợp lý, nhưng sẽ không tuyên bố những phương thức 'cuối cùng' có được hiệu ứng tương tự bằng cách cho phép Java tối ưu hóa chúng ra? – Owen

+0

Tôi không biết - có thể ý tưởng là không yêu cầu bất kỳ ai (trình biên dịch hoặc JVM) thực hiện bất kỳ tối ưu hóa nào ở đây ... –

Các vấn đề liên quan