假设我有一个抽象类
public abstract class Trainer<T extends Animal>{}
我有特定的培训师,例如:
public DogTrainer extends Trainer<Dog>{}
public HorseTrainer extends Trainer<Horse>{}
这些“训练师”中的每一个都有一套固定的技巧,他们可以训练动物去做,我想用 Enums 来做。所以我有一个界面:
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;
}
}
现在在每个 Trainer 类中,我想要一个方法说“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”方法,而是在父“培训师”类中定义一些可以强制执行枚举类型的东西......所以这是枚举和泛型的奇怪组合。
这可能吗?