泛型

来源:互联网 发布:淘宝水印字体怎么设置 编辑:程序博客网 时间:2024/06/08 10:15

泛型(Generic)

JDK5以前,对象保存到集合中就会失去其特性,取出时通常要程序员手工进行类型的强制转化,这样不可避免就会引发程序的一些安全性问题。

      JDK5中的泛型允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生的问题,转变为编译时的问题,一次提高程序的可读性和稳定性

 

需要注意的问题:

1、 使用泛型时,泛型类型须为引用类型,不能是基本数据类型,并且如果两边都使用到了泛型,则必须一样

2、 泛型是提供给javac编译使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛型的java程序后,生成的class文件中将不带有泛型信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”

3、 基本的术语,以ArrayList<E>为例:<>念typeof

ArrayList<E>中的E称为类型参数变量

ArrayList<Integer>中的Integer称为实际类型参数

整个称为ArrayList<E>泛型类型

整个ArrayList<E>称为参数化的类型

 

自定义带泛型方法

 

      Public <T,E,K> void b(T t, E  e, K k){}

      如果在定义中很多方法都用到同一个泛型,那么就可以把泛型定义到类上,那么泛型就作用到整个类中

 

 

自定义类上的泛型:

      定义在类上上的泛型对于静态方法是无效的,静态方法应该定义自己的泛型

      Public static <T> void c(T t){}

 

练习:

1、  编写一个泛型方法,实现制定位置上的数组元素的交换

public <T>void swap(T arr[], int pos1, int pos2) {

      T temp = arr[pos1];

      arr[pos1] = arr[pos2];

      arr[pos2] = temp;

    }

2、 编写一个泛型方法,接收一个任意数组,并颠倒数组中的所有元素

      public <T> voidreverse(T arr[]){

      int start=0;

      int end=arr.length-1;

      while(true){

          if(start>=end)

             break;

          T temp=arr[start];

          arr[start]=arr[end];

          arr[end]=temp;

          

          start++;

          end--;

      }

      

    }

0 0
原创粉丝点击