Java 中的泛型

 先来看一下以下 2 段代码,然后再进一步引出我们的泛型。

 

复制代码
  public static void main(String[] args) {         List list = new ArrayList();         list.add("123");         list.add(456);          Iterator it = list.iterator();         while(it.hasNext()){             // Error : Integer cannot be cast to String            String next = (String)it.next();           }      }
复制代码

 

上面这段代码,会出现转化异常的情况,但是编译是没问题的,在输出转化的时候却出现了异常,有没有一种冲动想要把集合中的类型归一?下面就是很正常的一个求和的方法,然而我们只能求类型为 Integer 的参数的和。

 

复制代码
public Integer add(Integer a,Integer b){     return a + b; }
复制代码

 

对于集合来说,我们若是能在编译时期指定该集合中存放数据的类型,这样在类型转化的时候就不会再出现错误了,同样的,在下面的求和方法中,这个方法我们只能求得类型为 Integer 的参数的和,我们能不能做到可以通用的求和呢?使用泛型,就可以做到。

 

泛型的概念也就是 “ 数据类型参数化 ” 正是由于我们不确定集合中可以指定的类型有哪些,是 Integer 还是 String ?求和方法中参数的数据类型可以有哪些,是 Float 还是 Double ?那我们就可以使用泛型来把这个数据类型给参数化。

 

泛型的应用有泛型接口,泛型类和泛型方法。下面定义一个泛型类,并演示使用方式。

 

复制代码
public class Box <T> {     // T 是 Type 的简写,代表任意类型,注意是类,而不是基本数据类型。     // 也可以换成其它单词,这只是一个表示而已。    T t;      public T getT() {         return t;     }     public void setT(T t) {         this.t = t;     }      // 在下面的应用中,我们可以将 T 换成任意我们想要的类型    public static void main(String[] args) {         Box<Integer> iBox = new Box<Integer>();         Box<Double> dBox = new Box<Double>();         // 在 JDK1.7 及其以上版本可以利用 “类型推断” 这样写。        Box<String> stringBox = new Box<>();     } }
复制代码

 

泛型方法的定义只需要在方法的声明中添加 < T > 即可,或是添加一组泛型 <K ,V> 。 

 

复制代码
public class Util {     public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {         return p1.getKey().equals(p2.getKey()) &&                p1.getValue().equals(p2.getValue());     } }  public class Pair<K, V> {     private K key;     private V value;     public Pair(K key, V value) {      
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信