| 
                        副标题[/!--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") ; 
 
  
                                                (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |