Скажем, у меня есть абстрактный класс
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;
}
}
Теперь в каждом из классов Тренера я хотел бы, чтобы метод сказал "trainingComplete", который берет одну из Enums в качестве входных данных и сохраняет ее в наборе. Так
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" в каждом из тренеров мне бы хотелось что-то в родительском классе "Тренеры", который может быть принудительно включен в Enum... Так что это странное сочетание Enums и generics.
Возможно ли это?