私はEffective JavaからItem 16を読み、継承よりも構成を優先しますか? そして今、私が Java を理解し始めた 1 年前に書いたコードに適用してみます。
私は、水泳、肉食などの特徴を持ち、さまざまな種類の食物を得ることができる動物をモデル化しようとしています。
public class Animal {
private final List<Trait> traits = new ArrayList<Trait>();
private final List<Food> eatenFood = new ArrayList<Food>();
}
項目 16 では、構成と転送の再利用可能なアプローチが提案されています。
public class ForwardingSet<E> implements Set<E> {
private final Set<E> s;
public ForwardingSet(Set<E> s) {this.s = s;}
//implement all interface methods
public void clear() {s.clear();}
//and so on
}
public class InstrumentedSet<E> extends ForwardingSet<E> {
//counter for how many elements have been added since set was created
}
実装できますが、クラスForwardingList<E>
に2回適用する方法がわかりません。Animal
現在、Animal
以下のような多くのメソッドがあります fortraits
および for eatenFood
. これは私には不愉快に思えます。
public boolean addTrait (Trait trait) {
return traits.add(trait);
}
public boolean removeTrait (Trait trait) {
return traits.remove(trait);
}
クラスをどのように再設計し
Animal
ますか?そのままにしておくか、申請してみる
ForwardingList
か。