Hãy nói rằng tôi có một lớp Foo trong Java có dữ liệu bất biến:Java: Phương pháp pseudo-setter cho các lớp học bất biến
class Foo {
final private int x;
public int getX() { return this.x; }
final private OtherStuff otherstuff;
public Foo(int x, OtherStuff otherstuff) {
this.x = x;
this.otherstuff = otherstuff;
}
// lots of other stuff...
}
Bây giờ tôi muốn thêm một phương pháp hữu ích mà sẽ tạo ra một "anh chị em" giá trị với trạng thái giống hệt nhau nhưng với một giá trị mới của x. Tôi có thể gọi nó là setX()
:
class Foo
{
...
Foo setX(int newX) { return new Foo(newX, this.otherstuff); }
...
}
nhưng ngữ nghĩa của setX()
là khác nhau hơn so với ước setter tiêu chuẩn cho các đối tượng đậu có thể thay đổi, vì vậy bằng cách nào đó điều này không cảm thấy đúng.
Tên tốt nhất cho phương pháp này là gì?
Tôi có nên gọi nó là withX()
hoặc newX()
hoặc cái gì khác?
chỉnh sửa: ưu tiên bổ sung trong trường hợp của tôi: Tôi có khách hàng scripting (thông qua JSR-223 và một mô hình đối tượng tôi xuất khẩu) có thể dễ dàng có được một đối tượng Foo
. Tuy nhiên, nó cồng kềnh, để gọi các nhà thầu hoặc tạo các nhà xây dựng hay bất cứ thứ gì. Vì vậy, nó là mong muốn cho tôi để cung cấp phương pháp này như là một tiện lợi cho khách hàng kịch bản.
Một câu hỏi liên quan: http://stackoverflow.com/questions/521893/whats-the-best-name-for-a-non-mutating-add-method-on- một bộ sưu tập bất biến. (Tương tự như vậy, nhưng để 'add' thay vì' setX'.) – ruakh