【发布时间】:2013-10-18 17:01:34
【问题描述】:
这在某种程度上是我对 previous question 的跟进。
假设我有一个动物的抽象父类。同一种动物可以有不同的气质,可以在不同类型的节目中表演。所以我的动物定义看起来像这样:
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 的定义中尝试使用DogTrainer.Trainables 作为Trainer 的参数时出现以下错误:
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>
谁能帮我理解我做错了什么?
【问题讨论】:
-
你能告诉我们错误是什么吗?
-
刚刚添加了错误信息。