여러 구현이 Foo
이고 여러 개의 숫자가 FooBuilder
인 경우 문제가 발생합니다. Foo
은 설정해야하는 몇 가지 공통 변수를 공유하지만 각각의 특정 기능을 구현하려면 각각의 FooBuilder
을 필요로하는 고유 변수가 있습니다. 여러 가지 FooBuilder
구현과, 등등Java : 수퍼 클래스 메서드 시그니처의 서브 클래스 반환
public abstract class FooBuilder {
...
public FooBuilder setA(int A) {
this.A = A;
return this;
}
...
}
및
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;
}
...
}
그리고 : 간결, 나는 같은 방법 체인을 사용하도록 FooBuilder
's의 세터를하고 싶습니다. 이것은 기술적으로 모든 것을 원하지만,이 접근법은 메서드 체이닝이 수행 될 때 메서드 호출의 순서에 민감합니다.
someFoo.setA(a).setB(b)...
방법은 체인 호출의 개발자가 순서에 대해 생각하도록 요구 다음이 방법은 컴파일 오류가 정의되지. 이것을 피하기 위해, 나는 어떻게 든 실제 구현 하위 클래스를 반환 FooBuilder
에 setters을 가지고 싶습니다. 그러나, 나는 이것을 어떻게하는지 잘 모릅니다. 가장 좋은 방법은 무엇입니까?
또한 모든 곳에서 강제로 캐스팅되거나 원하는 경우 수퍼 클래스의 속성을 변경하지 못하게합니다. –