java 泛型

来源:互联网 发布:学校网络系统集成方案 编辑:程序博客网 时间:2024/06/17 17:07

类型本来有:简单类型和复杂类型,引入泛型后把复杂类型分的更细了;
现在List, List 是 两种不同的类型;且 无继承关系;
泛型的好处如:

开始版本
public void write(Integer i, Integer[] ia);
public void write(Double d, Double[] da);
泛型版本
public void write(T t, T[] ta);
简便了代码

定义泛型

  • 定义在类后面
    紧跟类名后面public class TestClassDefine<T, S extends T>{}
    定义泛型 T, S, 且S 继承 T

  • 定义在方法装饰符后面
    紧跟修饰符后面(public)

    public <T, S extends T> T testGenericMethodDefine(T t, S s){}
定义泛型 T, S, 且S 继承 T

实例化泛型

  • 实例化定义在类上的泛型

    第一声明类变量或者实例化时。例如

      List<String> list;      list = new ArrayList<String>;
  • 第二继承类或者实现接口时。例如
    public class MyList<E> extends ArrayList<E> implements List<E> {...} 
  • 实例化定义方法上的泛型

    当调用范型方法时,编译器自动对类型参数(泛型)进行赋值,当不能成功赋 值时报编译错误

通配符(?)

上面有泛型的定义和赋值;当在赋值的时候,上面一节说赋值的都是为具体类型,当赋值的类型不确定的时候,我们用通配符(?)代替了:

  • 集合例子

    List

class Info<T>{      private T var ;     // 定义泛型变量      public void setVar(T var){          this.var = var ;      }      public T getVar(){          return this.var ;      }      public String toString(){   // 直接打印          return this.var.toString() ;      }  };  public class GenericsDemo14{      public static void main(String args[]){          Info<String> i = new Info<String>() ;       // 使用String为泛型类型          i.setVar("it") ;                            // 设置内容          fun(i) ;      }      public static void fun(Info<?> temp){     // 可以接收任意的泛型对象          System.out.println("内容:" + temp) ;      }         public static void fun(Info<? extends Number> temp){  // 只能接收Number及其Number的子类          System.out.print(temp + "、") ;      } };  

文章是从 http://my.oschina.net/jiemachina/blog/201507和http://iteye.blog.163.com/blog/static/18630809620131472312201/

0 0