tôi vẫn còn khá mới để Scala, nhưng tôi biết bạn có thể xác định các biến lớp được khởi tạo trong constructor nhưScala biến cuối cùng trong constructor
class AClass(aVal: String)
đó sẽ như thế nào làm như sau trong java
class AClass {
private String aVal;
public AClass(String aVal) {
this.aVal = aVal;
}
}
Trong Java, tôi sẽ khai báo aVal là cuối cùng. Có cách nào để làm cho biến aVal cuối cùng trong cú pháp Scala?
EDIT: Đây là những gì tôi nhìn thấy khi tôi biên dịch lớp Scala sau:
class AClass(aVal: String) {
def printVal() {
println(aVal)
}
}
Tôi chạy javap -private
và có đầu ra
public class AClass extends java.lang.Object implements scala.ScalaObject{
private final java.lang.String aVal;
public void printVal();
public AClass(java.lang.String);
}
Khi tôi thay đổi định nghĩa lớp scala có class AClass(**val** aVal: String)
Tôi nhận được kết quả sau đây từ javap -private
public class AClass extends java.lang.Object implements scala.ScalaObject{
private final java.lang.String aVal;
public java.lang.String aVal();
public void printVal();
public AClass(java.lang.String);
}
Phương thức công khai aVal
được tạo. Tôi vẫn đang học ở đây - bất cứ ai có thể giải thích lý do tại sao nó được tạo ra?
Note Tôi đang sử dụng scala 2,9
Ug. Tôi phải quên biên dịch lại và sau đó chứng thực các phát hiện của tôi với hành vi của các triển khai cũ hơn (http://scala-programming-language.1934581.n4.nabble.com/Val-and-Final-td1993410.html). Bạn thực sự là chính xác. Vấn đề tôi đã đề cập về các lớp con có thể ghi đè các vals (và đây là một vấn đề cho trận chung kết) bị phá vỡ bởi trường cơ bản là private và accessors trong các lớp được tạo ra sẽ ghi đè các lớp trong parent (không phải là final). Cảm ơn bạn đã đặt nó thẳng. – Chris