黑马程序员.Android攻城狮.JAVA基础.1.8.Java泛型
2014-06-25 17:01
483 查看
Java泛型
---------- android培训、java培训、期待与您交流!----------
使用泛型的主要原理就是:在类的声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值类型及参数类型。这样在类声明或者实例化的时候只要制定好需要的类型即可。
在不使用泛型之前,当类中操作的引用数据类型不确定的时候,用Object来进行扩展,现在可以用泛型来表示,这样可以避免强转的麻烦,而且将运行问题转移到的编译时期。
(1) 泛型可以定义类
什么时候定义泛型类?当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在来定义泛型来完成扩展,如:
(2) 泛型可以定义方法
为了让不同方法操作不同的数据类型,可以将泛型定义在方法上。
(3) 泛型可以同时定义在类与方法中
(4) 静态方法不可以访问定义在类上的泛型,可以将泛型定义在静态方法上,且<>要放在返回值类型前
(5) 泛型也可以定义在接口上
(6) 也可以对类指定多个泛型
在引用传递时,在泛型的操作中也可以设置一个泛型对象的范围上限及下限,即:泛型限定。
(1) 上限:使用“?extends E”可以接收E类型或者E的子类型对象,如下示例:
(2 )下限:使用“?super E”可以接收E类型或者E的父类型对象。
上限什么时候用:往集合中添加元素时,既可以添加E类型对象,又可以添加E的子类型对象。为什么?因为取的时候,E类型既可以接收E类对象,又可以接收E的子类型对象。
下限什么时候用:当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收。
---------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------
---------- android培训、java培训、期待与您交流!----------
1、泛型的概念
在JDK1.5之后,Java中出现了泛型的概念,主要是为了解决数据类型的安全问题。将运行时期的问题ClassCastException问题转换成了编译失败,体现在编译时期,程序员就可以解决问题。使用泛型的主要原理就是:在类的声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值类型及参数类型。这样在类声明或者实例化的时候只要制定好需要的类型即可。
2、泛型的使用
泛型用“<E>”来表示,其中的E并没有实际的意义,可以为任意的字母,E代表一个数据类型,并且这个类型是由外部定义的,当使用时“<E>”用来接收外部所定义的类型。在不使用泛型之前,当类中操作的引用数据类型不确定的时候,用Object来进行扩展,现在可以用泛型来表示,这样可以避免强转的麻烦,而且将运行问题转移到的编译时期。
(1) 泛型可以定义类
什么时候定义泛型类?当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在来定义泛型来完成扩展,如:
(2) 泛型可以定义方法
为了让不同方法操作不同的数据类型,可以将泛型定义在方法上。
(3) 泛型可以同时定义在类与方法中
(4) 静态方法不可以访问定义在类上的泛型,可以将泛型定义在静态方法上,且<>要放在返回值类型前
(5) 泛型也可以定义在接口上
(6) 也可以对类指定多个泛型
3、通配符
通配符的概念:在以上的泛型中都是指定了一个固定的类型,而使用通配符则可以解决当具体类型不确定的情况,这个通配符就是 “?” ,当操作类型时,不需要使用类型的具体功能时,只使用Object类中的功能。那么可以用 “?” 通配符来表未知类型。在引用传递时,在泛型的操作中也可以设置一个泛型对象的范围上限及下限,即:泛型限定。
(1) 上限:使用“?extends E”可以接收E类型或者E的子类型对象,如下示例:
(2 )下限:使用“?super E”可以接收E类型或者E的父类型对象。
上限什么时候用:往集合中添加元素时,既可以添加E类型对象,又可以添加E的子类型对象。为什么?因为取的时候,E类型既可以接收E类对象,又可以接收E的子类型对象。
下限什么时候用:当从集合中获取元素进行操作的时候,可以用当前元素的类型接收,也可以用当前元素的父类型接收。
---------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员.Android攻城狮.JAVA基础.1.5.Java多线程
- 黑马程序员.Android攻城狮.JAVA基础.1.1.Java环境搭建
- 黑马程序员.Android攻城狮.JAVA基础.1.3.Java面向对象
- 黑马程序员.Android攻城狮.JAVA基础.1.2.基础语法
- 黑马程序员.Android攻城狮.JAVA基础.1.6.String类
- 黑马程序员.Android攻城狮.JAVA基础.1.7.Java集合
- 黑马程序员.Android攻城狮.JAVA基础.1.4.Java异常
- 黑马程序员.Android攻城狮.JAVA基础.1.9.Java IO
- 黑马程序员.Android攻城狮.JAVA基础.1.10.Java网络编程
- 黑马程序员Java培训和Android培训:编程基础
- 黑马程序员.Android攻城狮.JAVA高新.2.2.Java 高新技术(2)
- 黑马程序员.Android攻城狮.JAVA应用.3.2.银行业务调度系统
- 黑马程序员Java培训、Android培训-Java 学习过程记录_语言基础3
- 黑马程序员Java培训、Android培训_Java 学习过程记录_语言基础2
- 黑马程序员Java培训、Android培训_Java基础加强_笔记
- 黑马程序员[android]我的java基础学习日记一
- 黑马程序员Java培训、Android培训_语言基础
- 黑马程序员Java培训、Android培训_网络编程的基础知识
- 黑马程序员.Android攻城狮.JAVA高新.2.1.Java 高新技术(1)
- 黑马程序员.Android攻城狮.JAVA应用.3.1.交通灯管理系统