抽象クラスがあるとしましょう
public abstract class Trainer<T extends Animal>{}
私は次のような特定のトレーナーを持っています:
public DogTrainer extends Trainer<Dog>{}
public HorseTrainer extends Trainer<Horse>{}
これらの「トレーナー」のそれぞれには、動物を訓練できる一連の固定されたトリックがあり、これには Enum を使用したいと考えています。だから私はインターフェースを持っています:
public interface TrainingActions<T extends Animal>{}
各トレーナーには、このインターフェースを実装する Enum があります。そう:
public DogTrainer extends Trainer<Dog>{
public enum Trainables implements TrainingActions<Dog>{
BARK, BITE, ROLLOVER, FETCH;
}
}
public HorseTrainer extends Trainer<Horse>{
public enum Trainables implements TrainingActions<Horse>{
JUMP, TROT, REARUP;
}
}
各トレーナー クラスで、Enum の 1 つを入力として受け取り、それをセットに保存する「trainingComplete」というメソッドが必要です。そう
public DogTrainer extends Trainer<Dog>{
public enum Trainables implements TrainingActions<Dog>{
BARK, BITE, ROLLOVER, FETCH;
}
public Set<Trainables> completed = new HashSet<Trainables>();
public void trainingComplete(Trainables t){completed.add(t);}
}
ただし、特定の各トレーナーで「完了」セットを定義し、各トレーナーで「trainingComplete」メソッドを定義する代わりに、親の「トレーナー」クラスに、列挙型を適用できる何かが必要です...つまり、列挙型とジェネリックの奇妙な組み合わせです。
これは可能ですか?