BaseBuilder
을 확장하려면 일부 DerivedBuilder
이 필요하다고 가정합니다. 기본 빌더는 foo
(BaseBuilder
을 반환)과 같은 몇 가지 메소드가 있습니다. 파생 된 빌더에는 방법 bar
이 있습니다. 메소드 bar
은 foo
메소드 다음에 호출해야합니다. 그것을하기 위해이 같은 DerivedBuilder
에 foo
메소드를 오버라이드 (override) 할 수 있습니다Java 일반 빌더
@Override
public DerivedBuilder foo() {
super.foo();
return this;
}
문제는 BaseBuilder
가 foo
같은 방법을 많이 가지고 내가 그들의 각 하나를 무시해야한다는 것입니다. 그래서 내가 제네릭을 사용하려고 그렇게하고 싶지 않은 :
public class BaseBuilder<T extends BaseBuilder> {
...
public T foo() {
...
return (T)this;
}
}
public class DerivedBuilder<T extends DerivedBuilder> extends BaseBuilder<T> {
public T bar() {
...
return (T)this;
}
}
그러나 문제는 내가 아직 여기 DerivedBuilder
입니다
new DerivedBuilder<DerivedBuilder>()
.foo()
.bar()
에도 T
불구하고 쓸 수 있다는 것입니다. 많은 기능을 오버라이드하지 않기 위해 내가 할 수있는 일은 무엇입니까?
을 제네릭이 approch, 당신이 호출 할 수 있습니다 :'새 DerivedBuilder(). foo(). bar()'. 'foo'를 먼저 실행하고'bar'를 실행합니다. 'BaseBuilder' 메서드를 더 호출하고 마지막으로'DerivedBuilder' 메서드를 호출하기를 원한다면'DerivedBuilder' 메서드를 호출 할 수 없기 때문에 두 번째 시간 메서드가'BaseBuilder' 참조를 반환하기 때문에 불가능합니다. s 방법. –
@ Sandeep.KI 그걸 실행하려했는데 컴파일러가'BaseBuilder'에서'bar'가 정의되지 않았다는 불평을합니다. 왜냐하면'foo(). bar()'컴파일러가'foo '이'T'가'BaseBuilder'를 확장한다는 것입니다 – PepeHands
[this] (http://stackoverflow.com/questions/4217013/how-to-force-derived-class-to-call-super-method-like-android -does) 및 [this] (http://stackoverflow.com/questions/6853638/require-override-of-method-to-call-super) 및 [this] (http://stackoverflow.com/questions/6142460/how-do-i-force-a-polymorphic-call-to-the-super-method) ... – user1803551