私はここで少しコメントを拡大します。
あなたのgetBehaviors()
メソッドは、メソッドのシグネチャを作り、特定の動物のための行動のリストを返すようにしたい場合は
が返され
List<Enum<?>>
はあなたを助けるために
何ももしないことを宣言します。その方法からあなたの
List<Enum<?>>
を取得したクライアントは、それが何であるかを知っている人には役に立たない何もできません。この制限は、ビヘイビアのリストに含まれるオブジェクトのタイプが実際には "ビヘイビア"であることを保証するのに役立つものではありません。彼らは週の日、年の何ヶ月か、まさに何でもよいでしょう!私は推測している何
は、あなたが(などBARK
、BITE
、のような定数で)DogBehavior
のようないくつかのenum
秒を持っているし、あなただけの、そのような行動はリストで許可されていることを確認したいということです。これらの動作がenum
に収集されていることは実装の詳細です。あなたがするべきことは、何かをBehavior
として指定する共通のインターフェースを導入することです。 Behavior
に関連する特定のメソッドがない場合は、メソッドを定義していないマーカーインターフェイスのみになります。
public enum DogBehavior implements Behavior {
BARK("Bark") {
public void doBehavior() {
// bark
}
},
// etc.
private final String name;
DogBehavior(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
次に、「動物」のように見えるかもしれません:
public interface Behavior {
public String getName();
public void doBehavior();
// etc.
}
あなたは、このインタフェースを実装するいくつかのenum
Sを持つことができます:それ以外の場合、あなたはそれが、このようなようないくつかの方法を、持っている場合があります
を
public abstract class Animal {
public abstract List<Behavior> getBehaviors();
}
これは、私にはもっと意味があります。
どうしてこのようにしたいですか?それは何かが 'enum'であることはしばしば多くの実装の詳細です。 'Animal'クラスがビヘイビアのリストを返すようにしたいのであれば、' List 'を返すべきです、' Behavior'はインターフェースです。 'Behavior'を実装するいくつかの' enum'または 'enum'を持つことができますが、その詳細は重要ではないようです。そして、ビヘイビアのリストに含まれるものに唯一の制限を加えることは、それが何らかの種類の 'enum'であるオブジェクトを含んでいるということだけです。私には分かりません。' DayOfWeek'は恐らく動作ではありません。 –
ColinD
あなたがお勧めするものは、私が欲しいものです。ありがとう。あなたの答えは以下の通り、+1と記入してください。 – kvista