java泛型的知识总结

来源:互联网 发布:匡恩网络不发工资 编辑:程序博客网 时间:2024/05/17 07:24
 

java泛型知识:
泛型同注解一样,也分为定义和使用,比如JDK中集合框架对泛型进行了定义,而我们使用集合框架
时,就直接遵循定义进行了使用。
泛型的定义:
   1、在类中进行定义
      public class T4<E> {
 private E e; 
 public void setE(E e){
  this.e=e;
 } 
 public E getE(){
  return this.e;
 }
     }
     也就是如以上的形式,在定义类的时候,定义该类中可能需要的泛型类
   2、在方法上定义:
     public class TT{
 public <E> void test(E e){
  
 }
     }
   3、定义泛型时加上该泛型的约束,默认的泛型实际上是表示继承Object类,可以在
    定义时指定需要继承的类或实现的接口:
    class TTT<E extends Map>{
 
    }
    这样在使用TTT的泛型时,该泛型必须实现Map接口。

  两种定义方式的不同,也就是该泛型的使用范围不同,在类上定义的泛型,则在整个类中都可
  使用;在方法上定义的泛型,只能在该方法中使用。
  定义泛型时,不能在定义的类中实例化该泛型,例如,下面的用法就是错的:
  class TTT<E>{
 public void test(){
  E e=new E();
 }
  }
  编译器会提示“不能实例化类型 E”,这个的具体原因我不清楚,如果一定要实例化该泛型,
  可以采取强制转换的方式,例如:
  class TTT<E>{
 public void test(){
  E e=(E)new Object();
 }
  }
  这个应该容易理解,因为没有显示指明类型,默认就是Object的子类。

  泛型的使用:
  使用泛型就比较容易了,记得当初学java集合框架的时候,很容易就理解了如何使用加上了
  泛型的集合框架。不过作为知识的完备性,有一点还是要说一下,就是在使用泛型时,可以
  使用这种语法来定义一个泛型引用:
  public static void main(String[] args) {  
  T4<? extends List> tt=null;
  tt=new T4<ArrayList>();
  tt=new T4<LinkedList>();
  }
  这样就可以让tt这个引用指向任何实现了List接口的泛型类。不过这样做个人认为不是很合适,
  本身泛型在使用时就是为了指明具体的类型,用这种方式使用,反而又模糊了使用的具体类型,
  如果使用set(E)时,编译器会报错,因为它不知道具体要把一个什么类型set进去。

  也就是说定义泛型时应当越抽象越好,而使用泛型时,则应越具体越好。

  对泛型的总结:
  泛型编程就是对处理的数据进行抽象,使得处理的算法具有普适性,也算是比较高级的编程了。
  对泛型的定义,我还没有在开发中实践过,以后有了实践经验,再来总结。