더 나은 대안은 슈퍼 클래스가 주입하고자하는 모든 필드를 캡슐화 전략 패턴에 비슷한 것을 사용하는 것입니다, 다음 하위 클래스가이를 주입 할 수 있습니다. 예 :
public abstract class Animal {
/**
* All injectable fields of the Animal class, collected together
* for convenience.
*/
protected static final class AnimalFields {
@Inject private Foo foo;
@Inject private Bar bar;
}
private final AnimalFields fields;
/** Protected constructor, invoked by subclasses. */
protected Animal(AnimalFields fields) {
this.fields = fields;
}
public Foo getFoo() {
// Within Animal, we just use fields of the AnimalFields class directly
// rather than having those fields as local fields of Animal.
return fields.foo;
}
public Bar getBar() {
return fields.bar;
}
}
public final class Cat extends Animal {
private final Whiskers whiskers;
// Cat's constructor needs to inject AnimalFields to pass to its superclass,
// but it can also inject whatever additional things it needs.
@Inject
Cat(AnimalFields fields, Whiskers whiskers) {
super(fields);
this.whiskers = whiskers;
}
...
}
나중에 코드에서 ChildClass를 구성해야하는 경우 어떻게해야합니까? 그렇게하는 가장 좋은 방법은 무엇입니까? ChildClass와 마찬가지로 child = 새 ChildClass (새 Foo(), bar)? Foo도 주사를 맞으면 어떨까요? – lapkritinis