这在某种程度上是我之前提出的问题的后续。
假设我有一个动物的抽象父类。同一种动物可以有不同的气质,可以在不同类型的节目中表演。所以我的动物定义看起来像这样:
public abstract class Animal<T extends Temperament, S extends Show>{...}
我想让各种动物的训练师了解动物的类型、性情、动物要表演的预期类型,并定义一组训练师可以教给该动物的技巧。因为我希望为特定动物定义一组技巧,所以我有一个枚举接口,如下所示:
public interface TrainingActions<T extends Animal<?,?>>{...}
任何实现该接口的枚举都为特定动物定义了一组训练动作,而不管它的性情和它可以执行的表演。
牢记这些,我对培训师父类的定义如下:
public abstract class Trainer
<A extends Animal<?,?>,
E extends Enum<E> & TrainingActions<A>,
T extends Temperament,
S extends Show>{
...}
现在,我试图创建一个具体的培训师,但得到一个错误:
public class DogTrainer
<T extends Temperament,
S extends Show> extends Trainer
<Dog<T,S>, DogTrainer.Trainables, T, S>{//error right here
public enum Trainables implements TrainingActions<Dog<?,?>>{
FETCH, GROWL, SIT, HEEL;
}
...
}
尝试在我的定义中DogTrainer.Trainables
用作参数时出现以下错误:Trainer
DogTrainer
Bound mismatch: The type DogTrainer.Trainables is not a valid substitute
for the bounded parameter <E extends Enum<E> & TrainingActions<A>> of the type
Trainer<A,E,T,S>
有人可以帮我理解我做错了什么吗?