【发布时间】:2013-10-17 19:01:40
【问题描述】:
假设我有一个父级抽象动物训练师课程:
public abstract class Trainer
<A extends Animal,
E extends Enum<E> & Trainables>{
protected EnumSet<E> completed;
public void trainingComplete(E trainable){
trainingComplete.add(trainable);
}
我想要父级动物训练师的具体扩展,以仅完成由它定义的可训练对象的训练。所以如果我有一个具体的训狗师如下:
public class DogTrainer extends Trainer<Dog, DogTrainer.Tricks>{
public enum Tricks implements Trainables {
FETCH, GROWL, SIT, HEEL;
}
}
对于DogTrainer 的当前定义,我只能对DogTrainer.Tricks 类型的参数执行trainingComplete。但我想强制任何创建具体Trainer 的人都应该允许trainingComplete() 用于它在自身内部定义的Trainables。
换句话说,我当前设计的问题是,如果我有另一个教练,如下所示:
public class PoliceDogTrainer extends Trainer<Dog, PoliceDogTrainer.Tricks>{
public enum Tricks implements Trainables {
FIND_DRUGS, FIND_BOMB, FIND_BODY;
}
}
没有什么能阻止某人定义另一个试图教狗的胭脂训练师,警察把戏:
public class RougeTrainer extends Trainer<Dog, PoliceDogTrainer.Tricks>{
...
}
我想禁止这样做,并允许扩展类仅使用他们自己指定的可训练对象。
我该怎么做?
【问题讨论】:
-
我认为这也可以通过我的解决方案解决:earlier question。
标签: java generics enums enumset