public class Animal implements Comparable<Animal>{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Animal o) { // TODO Auto-generated method stub return 0; } }
定义一个Animal类,实现Comparable方法
问题1:implements Comparable<Animal> 和implements Comparable 有什么区别
如果携带类型参数<Animal>那么 就限定了Animal对象只能和Animal对象比较,如果和其他对象比较,在编译阶段就会出错,不携带类型参数<Animal>当然也不会出错,但是Animal对象和其他类型对象比较毫无意义,且容易出错。
编译阶段就能预防错误。。
public class Dog extends Animal{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
定义一个Dog类,是Animal对象的子类,由于Animal对象已经实现了Comparable接口,因此,Dog类就不能再次实现Comparable<Dog>接口
编译时出错。。
可以直接使用Animal类的compare(Animal)方法
定义一个通用的排序方法
这三个方法都没问题,但是第三个方法使用了泛型,通常采用
但是第三种方法类型参数T 必须实现Comparable接口,因此Dog类型是不能使用此方法的
如何解决?
Comparable<? super T> 使用父类方法比较子类型
这样无论是List<Dog> List<Animal> 都能使用这个方法进行比较,做到了真正的通用性
在非泛型类的泛型方法中,没什么区别