| 副标题[/!--empirenews.page--] 对于java的泛型我一直属于一知半解的,平常真心用的不多。直到阅读《Effect  Java》,看到很多平常不了解的用法,才下定决心,需要系统的学习,并且记录下来。 
 1、泛型的概述: 1.1 泛型的由来 根据《Java编程思想》中的描述,泛型出现的动机: 有很多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。 泛型的思想很早就存在,如C++中的模板(Templates)。模板的精神:参数化类型 1.2 基本概述 
    泛型的本质就是"参数化类型"。一提到参数,最熟悉的就是定义方法的时候需要形参,调用方法的时候,需要传递实参。那"参数化类型"就是将原来具体的类型参数化泛型的出现避免了强转的操作,在编译器完成类型转化,也就避免了运行的错误。 1.3 泛型的目的 Java泛型也是一种语法糖,在编译阶段完成类型的转换的工作,避免在运行时强制类型转换而出现ClassCastException,类型转化异常。 1.4 实例 JDK 1.5时增加了泛型,在很大的程度上方便在集合上的使用。 不使用泛型: public static void main(String[] args) {  List list = new ArrayList();  list.add(11);  list.add("ssss");  for (int i = 0; i < list.size(); i++) {  System.out.println((String)list.get(i));  }  } 
 因为list类型是Object。所以int,String类型的数据都是可以放入的,也是都可以取出的。但是上述的代码,运行的时候就会抛出类型转化异常,这个相信大家都能明白。 使用泛型: public static void main(String[] args) {  List<String> list = new ArrayList();  list.add("hahah");  list.add("ssss");  for (int i = 0; i < list.size(); i++) {  System.out.println((String)list.get(i));  }  } 
 在上述的实例中,我们只能添加String类型的数据,否则编译器会报错。 2、泛型的使用 泛型的三种使用方式:泛型类,泛型方法,泛型接口 2.1 泛型类 泛型类概述:把泛型定义在类上 定义格式: public class 类名 <泛型类型1,...> {   } 
 注意事项:泛型类型必须是引用类型(非基本数据类型) 2.2 泛型方法 泛型方法概述:把泛型定义在方法上 定义格式: public <泛型类型> 返回类型 方法名(泛型类型 变量名) { } 注意要点: 方法声明中定义的形参只能在该方法里使用,而接口、类声明中定义的类型形参则可以在整个接口、类中使用。当调用fun()方法时,根据传入的实际对象,编译器就会判断出类型形参T所代表的实际类型。 class Demo{   public <T> T fun(T t){ // 可以接收任意类型的数据   return t ; // 直接把参数返回   }  };  public class GenericsDemo26{   public static void main(String args[]){   Demo d = new Demo() ; // 实例化Demo对象   String str = d.fun("汤姆") ; // 传递字符串   int i = d.fun(30) ; // 传递数字,自动装箱   System.out.println(str) ; // 输出内容   System.out.println(i) ; // 输出内容   }  }; 
 2.3 泛型接口 泛型接口概述:把泛型定义在接口 定义格式: public interface 接口名<泛型类型> {   } 
 实例: /**  * 泛型接口的定义格式: 修饰符 interface 接口名<数据类型> {}  */ public interface Inter<T> {  public abstract void show(T t) ; } /**  * 子类是泛型类  */ public class InterImpl<E> implements Inter<E> {  @Override  public void show(E t) {  System.out.println(t);  } } Inter<String> inter = new InterImpl<String>() ; inter.show("hello") ; 
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |