Tôi đang xử lý sự cố trong đó có một số triển khai Foo
, kèm theo một số số FooBuilder
. Trong khi Foo
chia sẻ một số biến chung cần được đặt, chúng cũng có các biến riêng biệt yêu cầu FooBuilder
tương ứng của chúng để triển khai một số chức năng cụ thể. Đối với tính cô đọng, tôi muốn có FooBuilder
's setters sử dụng phương pháp chaining, như:Java: trả về phân lớp trong chữ ký của phương thức siêu lớp
public abstract class FooBuilder {
...
public FooBuilder setA(int A) {
this.A = A;
return this;
}
...
}
và
public class FooImplBuilder extends FooBuilder{
...
public FooImplBuilder setB(int B) {
this.B = B;
return this;
}
public FooImplBuilder setC(int C) {
this.C = C;
return this;
}
...
}
Và như vậy, với một số FooBuilder
triển khai khác nhau. Tuy nhiên, kỹ thuật này làm mọi thứ tôi muốn, cách tiếp cận này nhạy cảm với thứ tự các phương thức gọi khi thực hiện chuỗi phương thức. Sau đây có lỗi biên dịch không xác định phương pháp:
someFoo.setA(a).setB(b)...
Yêu cầu nhà phát triển nghĩ về thứ tự gọi phương thức trong chuỗi. Để tránh điều này, tôi muốn có các setters trong FooBuilder
bằng cách nào đó trả về lớp con thực hiện thực tế. Tuy nhiên, tôi không chắc chắn làm thế nào để làm điều này. Đâu là cách tiếp cận lí tưởng nhất?
Ngoài ra, nó buộc phải truyền ở khắp mọi nơi hoặc nó ngăn bạn thay đổi các thuộc tính của lớp bậc trên khi bạn muốn. –