これは、私が持っていた以前の質問からのフォローアップです。
動物の抽象親クラスがあるとしましょう。同じ種類の動物でも気質が異なり、さまざまな種類のショーで演じることができます。したがって、私の動物の定義は次のようになります。
public abstract class Animal<T extends Temperament, S extends Show>{...}
動物の種類、気質、動物が演じるショーの種類を認識し、トレーナーがその動物に教えることができる一連のトリックを定義する、さまざまな動物のトレーナーが必要です。特定の動物に対してトリックのセットを定義したいので、次のような enum インターフェースを用意します。
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>
誰かが私が間違っていることを理解するのを手伝ってくれますか?