2

私はこのトピックをさらに調査しましたが、純粋にパラメトリック ポリモーフィズムを詳述する例として、「実装」(サブタイプ ポリモーフィズムを詳述する) を使用してはならず、代わりにジェネリックを使用する必要があることを認識しています。

これは私の前の質問です: Java のパラメトリック多態性とは (例を使用して)?

これは、1 つの問題でジェネリックを使用するために作り直されたコードです。

class Pet<T>
{
  private T pet;

  public Pet(T pet)
  {
    this.pet = pet;
  }

  public String talks()
  {
    // what do i write here?
    // pet.talks(); is undefined for type T
  }
}

class Cat
{
  public String talks()
  {
    return "Meow";
  }
}

class Dog
{
  public String talks()
  {
    return "Woof";
  }
}

public class TestPet
{

  public static void main(String[] args)
  {
    Pet<Cat> cat = new Pet<Cat>(new Cat());
    System.out.println("Cat says " + cat.talks());

    Pet<Dog> dog = new Pet<Dog>(new Dog());
    System.out.println("Dog says " + dog.talks());
  }

}

コメントで詳しく説明されている私のコードには、1 つの問題があります。implements コマンドを使用せずに記述する方法がわかりません。あなたは何を書くべきか知っていますか?

4

1 に答える 1

8

type にメソッドTがあることを保証するインターフェースを実装するように、上限を追加する必要があります。talks()T

class Pet<T extends Talker>
{
    private T pet;

    public Pet(T pet)
    {
        this.pet = pet;
    }

    public String talks()
    {
        return pet.talks(); // is now defined for type T
    }
}

interface Talker
{
    String talks();
}

デモ、Ray Toal のおかげです: http://ideone.com/yiAqM

于 2012-04-17T03:05:12.257 に答える