【发布时间】:2013-10-11 03:29:47
【问题描述】:
假设我有一个抽象类
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”方法,而是希望在父“培训师”类中可以强制执行 Enum 类型...所以这是枚举和泛型的奇怪组合。
这可能吗?
【问题讨论】:
-
在每个声明中,
Enum应该是enum。 -
啊是的 =) 谢谢!更新
-
显示动物的定义
-
@Bohemian,你能告诉你需要用 def 看到什么吗?动物?我想对于这个类比,它只是一些常见的动物属性(平均体重、属、种),也许还有一些常见的方法......你打算用动物定义去哪里......?
-
对于
I'd like something in the parent 'Animal' class that can be Enum-type enforced,我想你的意思是I'd like something in the parent ***'Trainer'*** class that can be Enum-type enforced,对吧?