码迷,mamicode.com
首页 > 编程语言 > 详细

Java泛型再学习

时间:2014-08-15 22:21:49      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   java   使用   strong   数据   ar   

泛型是对于数据的一种规范,他限定了类、容器、方法可以接受的参数类型,避免参数类型混乱。

一、基本泛型

泛型最常见的地方就是集合,如:

-- ArrayList<String>  表示这个集合中只能存放String类型的元素

-- HashMap<String, Object>  表示这个图中只能存放键为String类型,值为Object类型的元素

特别要注意的时,泛型只存在于编译阶段,在程序运行阶段,我们定义的泛型是并不存在的,这种方案叫“擦除”,示例:

1 public class GenericTest {
2 
3     public static void main(String[] args) {
4         ArrayList<String> a = new ArrayList<String>();
5         ArrayList<Integer> b = new ArrayList<Integer>();
6         System.out.println(a.getClass() == b.getClass()); //true
7     }
8     
9 }

从示例可以看出,虽然定义了两个泛型类型不同的ArrayList集合,但是他们同属于一份字节码,这就证明了泛型的存活阶段只存在于编译期。

 

二、泛型方法

Java泛型方法的概念是基于C++的模板函数出现的,但是由于JVM指令集的问题,导致Java并不能完全实现完全和C++模板方法一样的泛型方法,泛型方法的定义如下:

访问修饰符 定义泛型类型 返回值类型 方法名(参数列表...) {

    //....

}

1 public class GenericTest {
2     
3     public <T> T add(T i, T j) {
4         return null;
5     }
6 
7 }

要说明的是,定义泛型类型不一定使用T,只是业界大家习惯于使用T而已,比如ArrayList<E>,就是用的E。泛型类型代表任意引用类型

如上例,我们定义了一个泛型方法,在返回值T的前面使用<T>定义了这个方法要使用的泛型类型,然后传入两个为T类型的变量,对于该方法,可以执行以下调用:

-- add(1,2);

-- add(3.5,12);

-- add("abc",true);

-- add(12,"xyz");

可以看到,除了第一个调用传入的两个参数是同类型外,其他的调用传入的都是不同类型的参数。但是方法却可以正确执行,这就是类型推导。简单来讲,就是两个不同类型的数据进行运算时,运算结果的类型总是运算元素中最大的类型。即,int和float运算,结果是float类型,String和boolean运算,结果是String类型......

 

三、泛型类

泛型类在开发中就比较常用了,下面给出一个实际开发中要使用的分页工具类PageModel:

 1 public class PageModel<T> {
 2 
 3     private Integer pageNo;
 4     
 5     private Integer pageSize;
 6     
 7     private Integer totalRecords;
 8     
 9     private List<T> records;
10 
11     //省略getter&setter方法
12 }

在类名的后面限定泛型类型,那么在整个类中,就可以使用这个类型去进行变量、方法的限定了。

进行如下初始化:

1 PageModel<User> pageModel = new PageModel<User>();

此时,属性records所代表的集合中就只能存放User对象了,这就是泛型类的一个使用。说白了,泛型类,在类名后面定义的泛型类型对类本身没有什么用,这个类型只是用来限定类成员的。

Java泛型再学习,布布扣,bubuko.com

Java泛型再学习

标签:style   blog   color   java   使用   strong   数据   ar   

原文地址:http://www.cnblogs.com/jasongan/p/3915721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!