Java泛型的应用:T extends Comparable? super T(2)

// 创建一个 Animal List
List<Animal> animals = new ArrayList<Animal>();
animals.add(
new Animal(25));
animals.add(
new Dog(35));

// 创建一个 Dog List
List<Dog> dogs = new ArrayList<Dog>();
dogs.add(
new Dog(5));
dogs.add(
new Dog(18));

// 测试  mySort1() 方法
mySort1(animals);
mySort1(dogs);

  结果编译出错,报错信息为:

The method mySort1(List<T>) in the type TypeParameterTest is not applicable for the arguments (List<Dog>)

  mySort1() 方法的类型参数是<T extends Comparable<T>>,它要求的类型参数是类型为T的Comparable。

  如果传入的是List<Animal>程序将正常执行,因为Animal实现了接口Comparable<Animal>。

  但是,如果传入的参数是List<Dog>程序将报错,因为Dog类中没有实现接口Comparable<Dog>,它只从Animal继承了一个Comparable<Animal>接口。

  注意:animals list中实际上是包含一个Dog实例的。如果碰上类似的情况(子类list不能传入到一个方法中),可以考虑把子类实例放到一个父类 list 中,避免编译错误。

  3.2 对mySort12()进行测试,main方法代码如下所示:

public static void main(String[] args)
{
   
// 创建一个 Animal List List<Animal> animals = new ArrayList<Animal>();
    animals.add(
new Animal(25));
    animals.add(
new Dog(35));

   
// 创建一个 Dog List
    List<Dog> dogs = new ArrayList<Dog>();
    dogs.add(
new Dog(5));
    dogs.add(
new Dog(18));

   
// 测试  mySort2() 方法
    mySort2(animals);
    mySort2(dogs);
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9939ca355c8df3fdb1c8a95bb4b856d5.html