0

Animal というクラスと AnimalTrainer というインターフェースがあるとします。

public interface AnimalTrainer
 {
    void trainAnimal(Animal animal);
 }

ここで、Lion のみをトレーニングする実装を作成したい場合に問題が発生します。たとえば、Lion が Animal を拡張する場合です。

public class LionTrainer implements AnimalTrainer
 {
    public void trainAnimal(Lion lion)
      {
         // code 
      }
 }

しかし、これはうまくいきません。上記の LionTrainer 実装が可能になるように、どうすれば AnimalTrainer で trainAnimal メソッドを定義できますか? または、LionTrainer の実装を変更する必要がありますか?

4

3 に答える 3

4

AnimalTrainer と入力する必要があります

public interface AnimalTrainer<T extends Animal>
 {
    public void trainAnimal(T animal);
 }

public class LionTrainer implements AnimalTrainer<Lion>
 {
    public void trainAnimal(Lion lion);
 }
于 2012-05-14T15:39:27.527 に答える
2

ジェネリックを使用する:

public interface AnimalTrainer<T extends Animal> {
   void trainAnimal(T animal);
}
class LionTrainer implements AnimalTrainer<Lion> {
   public void trainAnimal(Lion lion) {...}
}
于 2012-05-14T15:39:29.600 に答える
1

ジェネリック型を使用する必要があります...

public interface AnimalTrainer<T extends Animal>
 {
    public void trainAnimal(T animal);
 }

それからLionTrainer implements AnimalTrainer<Lion>...

于 2012-05-14T15:40:24.970 に答える