【Java学习笔记】36:泛型的类型变量的限定

来源:互联网 发布:压缩包加密软件 编辑:程序博客网 时间:2024/05/22 03:16

首先,在泛型编程中的类型参数只能被实例化为引用类型的,而不能是基本类型的。
在这里借用extends关键字做抽象类型的限定,即便是要求这个抽象类型它实现了一个接口。

*对泛型类的限定

package day36;class MyInt implements Comparable<MyInt>{      int i;      public MyInt(int i) {          this.i = i;      }      @Override      public String toString() {          return i+"";      }      @Override      public int compareTo(MyInt o) {          if(this.i>o.i)              return 1;          else if(this.i<o.i)              return -1;          return 0;      }  }public class Test {    public static void main(String[] args) {        Integer[] i1={1,4,-5,17};        MyClass<Integer> m1=new MyClass<Integer>();        System.out.println(m1.max(i1)+","+m1.min(i1));        MyInt[] i2={new MyInt(3),new MyInt(-9),new MyInt(7),new MyInt(-10),new MyInt(8)};        MyClass<MyInt> m2=new MyClass<MyInt>();        System.out.println(m2.max(i2)+","+m2.min(i2));    }}//这个类必须实现了Comparable接口,即对其做了这样的限定class MyClass<T extends Comparable<T>>{    //获得数组中的最大值    public T max(T[] a){        T m=a[0];        for(T x:a)        {            if(x.compareTo(m)>0)//表示比m大                m=x;        }        return m;    }    //获得数组中的最小值        public T min(T[] a){            T m=a[0];            for(T x:a)            {                if(x.compareTo(m)<0)//表示比m小                    m=x;            }            return m;        }}

运行结果:
17,-5
8,-10

*对泛型方法的限定

package day36;class MyInt implements Comparable<MyInt>{      int i;      public MyInt(int i) {          this.i = i;      }      @Override      public String toString() {          return i+"";      }      @Override      public int compareTo(MyInt o) {          if(this.i>o.i)              return 1;          else if(this.i<o.i)              return -1;          return 0;      }  }public class Test {    public static void main(String[] args) {        //这种方式可以共用相同的Class,将泛型做的更彻底        MyClass m=new MyClass();        Integer[] i1={1,4,-5,17};        System.out.println(m.max(i1)+","+m.min(i1));        MyInt[] i2={new MyInt(3),new MyInt(-9),new MyInt(7),new MyInt(-10),new MyInt(8)};        System.out.println(m.max(i2)+","+m.min(i2));    }}//在普通类的内部建立泛型方法,并对方法本身作限定class MyClass{    //获得数组中的最大值    public <T extends Comparable<T>> T max(T[] a){        T m=a[0];        for(T x:a)        {            if(x.compareTo(m)>0)//表示比m大                m=x;        }        return m;    }    //获得数组中的最小值        public <T extends Comparable<T>> T min(T[] a){            T m=a[0];            for(T x:a)            {                if(x.compareTo(m)<0)//表示比m小                    m=x;            }            return m;        }}

运行结果:
17,-5
8,-10

原创粉丝点击