Java - 泛型

泛型的基本概念

[plain]  view plain  copy
  1. 泛型就是将类型作为一个参数来指定,有了泛型后类型不再是不可变的,可以由泛型参数来指定  
  2. 泛型是JDK5.0中一个最重要的特征,  
  3.     泛型可以让我们不使用强制类型转化和运行时最小地抛出ClassCaseException的可能  
  4. 泛型标识符  
  5.     E(K,V)表示集合,K键类型,V值类型  
  6.     T,U,S表示任意类型  

限制泛型的类型

[plain]  view plain  copy
  1. public class MyGeneric<T> {}  
  2.     表示T继承Object,相当于,<T extends Object>{}  
  3. public class MyGeneric<T extends List>{}  
  4.     表示T只能是List子接口或者子类  
  5. public class MyGeneric<T extends List&Map>{}  
  6.     表示T只能是List子接口或者子类或者Map子接口或者子类  
  7. ArrayList<Object> = new Array<String>  
  8.     表面看起来String可以放入到Object,其实不行  
  9.     因为Object列表中可以放入任何对象,而String只能放入字符串  
  10. public class MyGeneric<?> {}  
  11.     ?是通配符,表示可以接受任意具体类型  
  12.     泛型通配符只能用于引用声明,不可以创建对象  
  13.         ArrayList<?> al= new ArrayList<?>  
  14.     泛型引用不可以调用使用了泛型参数的方法  
  15. public class MyGeneric<T super List>{}      
  16.     表示T只能是List父类或者父接口  

<T extends List>和<? extends List>的区别

[plain]  view plain  copy
  1. <T extends List>是定义类时就确定了T的类型是List的子接口或者子类  
  2. <? extends List>是定义类时可以不确定T的类型,而是在使用的时候确定引用可以指向什么类型  

泛型案例

[java]  view plain  copy
  1. package com.itlwc;  
  2.   
  3. public class MyGeneric<T1,T2,T> {  
  4.     private T1 foo1;  
  5.     private T2 foo2;  
  6.     private T[] fooArray;  
  7.   
  8.     public T1 getFoo1() {  
  9.         return foo1;  
  10.     }  
  11.   
  12.     public void setFoo1(T1 foo1) {  
  13.         this.foo1 = foo1;  
  14.     }  
  15.   
  16.     public T2 getFoo2() {  
  17.         return foo2;  
  18.     }  
  19.   
  20.     public void setFoo2(T2 foo2) {  
  21.         this.foo2 = foo2;  
  22.     }  
  23.   
  24.     public T[] getFooArray() {  
  25.         return fooArray;  
  26.     }  
  27.   
  28.     public void setFooArray(T[] ArrfooArrayay) {  
  29.         this.fooArray = ArrfooArrayay;  
  30.     }  
  31.     public static void main(String[] args) {  
  32.         MyGeneric<Boolean,Integer,String> foo = new MyGeneric<Boolean,Integer,String>();  
  33.         String[] str = { "a""b""c" };  
  34.         foo.setFoo1(true);  
  35.         foo.setFoo2(123);  
  36.         foo.setFooArray(str);  
  37.     }  
  38. }  

方法中使用泛型

[java]  view plain  copy
  1. package com.itlwc;  
  2.   
  3. public class Test {  
  4.     //自定义泛型方法  
  5.     public static <T> T getLast(T[] a){  
  6.         //返回最后一个元素  
  7.         return a[a.length-1];  
  8.     }  
  9.     public static void main(String[] args) {  
  10.         String[] str = {"a","b","c"};  
  11.         System.out.println("数组最后一个元素为: "+Test.<String>getLast(str));  
  12.         Integer[] i = {1,2,3};  
  13.         System.out.println("数组最后一个元素为: "+Test.<Integer>getLast(i));  
  14.     }  
  15. }  
  16. /* 
  17. 打印结果: 
  18.     数组最后一个元素为: c 
  19.     数组最后一个元素为: 3 
  20. */  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值