Chỉ đọc cho một thuộc tính thật dễ dàng, chỉ cần tạo phương thức getter mà không có trình đặt tương ứng. Thật dễ dàng để tạo một trường có thể sửa đổi riêng tư.
thách thức lớn nhất của bạn ở đây là không gian tên chia sẻ, bạn muốn để có thể sử dụng cùng tên cho:
- các nhà xây dựng param
- lĩnh vực sửa đổi nội
- getter công
- thiết lập riêng tư
Đáng buồn thay, điều này là không thể, và bạn cần một tên riêng cho mỗi vai trò ... mething như thế này:
class Bippy(bop0: Int) {
private[this] var privatebop = bop0
//privatebop is ONLY EVER used by the following getter and setter:
private def bop_=(x:Int) = privatebop = x
def bar = privatebop
}
Nếu bạn không quan tâm về việc sử dụng đối số được đặt tên, hoặc với tên của các đối số trong Scaladoc, thì đây có thể được rút ngắn hơn nữa:
class Bippy(private[this] var privatebop) {
//privatebop is ONLY EVER used by the following getter and setter:
private def bop_=(x:Int) = privatebop = x
def bop = privatebop
}
CẬP NHẬT
Phương pháp sạch nhất, được cho là, mang lại cho bạn các thông số được đặt tên là kết hợp một nhà máy với một trong các kỹ thuật trên:
object Bippy{
def apply(bop: Int) = new Bippy(bop)
}
Mà sau đó có thể được gọi là Bippy(42)
. Cũng giống như hàm tạo thông thường, nhưng không có từ khóa new
.
Nguồn
2010-01-07 20:11:18
Câu trả lời hay, cảm ơn bạn rất nhiều! – Malax