泛型
2016-05-31 00:00
411 查看
摘要: 泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。
泛型的主要目标是提高 Java 程序的类型安全
消除强制类型转换
这使得代码更加可读,并且减少了出错机会
加入你有以下代码:
编译失败,因为List<Integer>不是一个List<Object>(非协变的)
解决方案就是使用通配符
在List<V>中,类型参数V出现在get()、add()、contains()等方法的签名中。即:方法的返回值肯定是V类型的。
为什么您选择使用泛型方法
编译器允许您创建Matrix<Integer>或Matrix<Float>类型的变量,
但是如果您试图定义 Matrix<String>类型的变量,则会出现错误。
泛型的好处
类型安全。泛型的主要目标是提高 Java 程序的类型安全
消除强制类型转换
这使得代码更加可读,并且减少了出错机会
泛型不是协变的
List<Object>不是List<String>的父类型 数组是协变的
//如果 A 扩展 B,那么 A 的数组也是 B 的数组,并且完全可以在需要B[]的地方使用A[]: Integer[] intArray = new Integer[10]; Number[] numberArray = intArray; //对于泛型来说,下面的代码是无效的 List<Integer> intList = new ArrayList<Integer>(); List<Number> numberList = intList; // invalid
泛型中的类型通配符
List<?>是任何泛型List的父类型加入你有以下代码:
List<Integer> list = new List<Integer>(); printList(list);//×:编译error void printList(List<Object> l) { for (Object o : l) { System.out.println(o); } }
编译失败,因为List<Integer>不是一个List<Object>(非协变的)
解决方案就是使用通配符
List<Integer> list = new List<Integer>(); printList(list);//×:编译error void printList(List<?> l) { for (Object o : l) { System.out.println(o); } }
泛型方法
泛型类在多个方法签名间实施类型约束在List<V>中,类型参数V出现在get()、add()、contains()等方法的签名中。即:方法的返回值肯定是V类型的。
public static < K1 extends Serializable, V1 extends Encodable < K1 >> Decoder < K1, V1 > create( V1[] values ) { return new Decoder < K1, V1 >( values ); }
为什么您选择使用泛型方法
*当泛型方法是静态的时,这种情况下不能使用类类型参数 *
泛型类
public class Matrix<V extends Number> { ... }
编译器允许您创建Matrix<Integer>或Matrix<Float>类型的变量,
但是如果您试图定义 Matrix<String>类型的变量,则会出现错误。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树