今天看到了两个这样的写法,非常好奇。

  1. <T extends Comparable<? super T>>
  2. public class BplusTree<K extends Comparable </K/>,V>
  3. 下面是不同人对这种写法的解释 大概理解的意思是实现不同类之间属性的对比

转载链接

这段代码是什么意思呢

public class minStack<T extends Comparable<? super T>> {
	Stack<T> data;
	Stack<T> min;
	T minimum;
	int N;

public minStack() {
	data = new Stack<T>();
	min = new Stack<T>();
	N = 0;
}

说明1

  • T是java中的泛型这个比较容易理解
  • <T extends Comparable>, 这个也是比较常见的写法,T必须实现Comparble接口,而比较类型T也比较容易理解因为一般情况下只有类型相同的才可以比较。
  • 问题来了,为什么要实现<T extends Comparable<? super T>>这种方法,看下面的例子。👇
class Dog implements Comparable<Dog>{
    int weight;
    public Dog(int weight) {
        this.weight = weight;
    }
    @Override
    public int compareTo(Dog o) {
        return this.weight - o.weight;
    }
}
class Labrador extends Dog{
    public Labrador(int weight) {
        super(weight);
    }
}

但如果泛型是<T extends Comparable >显然 Labarador 是不符合的,
因为他并没有实现 comprable</Labrador/>,如果改成<T extends Comparable<? super T>>,那么只要Dog实现了Comparabl接口。Labrador也能用啦。

说明2

从基本的继承实现概念出发:若有:

class Father implements Comparable

以及:class Son extends Father 如果定义Son时:Son 没有implements Comparable那么:对于这种情况:class A <T extends Comparable< T>>new A是非法的,因为Son 没有implements Comparable而对于这种情况:class A <T extends Comparable< ? super T>>new A是合法的,上述表达式中?可以匹配Father,因为Son implements Comparable从上可以看出这种写法的好处是父类若实现了Comparable<父类>,那么即使子类没有实现Comparable<子类>,一样可以new A<子类>

说明3

泛型编程<T extends Comparable<? super T>>是什么意思-LMLPHP

补充1:java中implements和extends

关键字implements是一个类,实现一个接口用的关键字,它是用来实现接口中定义的抽象方法。实现一个接口,必须实现接口中的所有方法。使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)
还有几点需要注意:
(1)接口可以被多重实现(implements),抽象类只能被单一继承(extends)
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static final, 抽象类字段默认是”friendly”(本包可见)

补充2:compare__详细用法

一、java中的compareTo():
String s1=“abc”;
String s2=“ace”;
int result=s1.compareTo(s2);
System.out.println(result);

用于比较前后2个字符串的asc码的差值,如果result=0,表示s1=s2; <0表示s1<s2;>0表示s1>s2;

注意:数字类型比较不能用compareTo,直接用 >,<,==,!=比较即可;

补充3:访问父类的方法super

泛型编程<T extends Comparable<? super T>>是什么意思-LMLPHP

09-24 12:15