Java泛型之通配符
2015-03-31 22:39
155 查看
概念
Java通配符有两种
1、无限定通配符 形式<?>
2、限定通配符
上边界限定通配符 形式< ? extends Number> //用Number举例
下边界限定通配符 形式< ? super Number> //用Number举例
无限定通配符
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量的主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
限定通配符
界定通配符的上边界(向上造型一个泛型对象的引用)
Vector<?extends 类型1> x = new Vector<类型2>();
类型1指定一个数据类型,那么类型2就只能是类型1或者是类型1的子类
Vector<?extends Number> x = newVector<Integer>();//这是正确的
Vector<?extends Number> x = newVector<String>();//这是错误的
界定通配符的下边界(向下造型一个泛型对象的引用)
Vector<?super 类型1> x = newVector<类型2>();
类型1指定一个数据类型,那么类型2就只能是类型1或者是类型1的父类
Vector<?super Integer> x = new Vector<Number>();//这是正确的
Vector<?super Integer> x = new Vector<Byte>();//这是错误的
提示:限定通配符总是包括自己
存取原则和PECS法则
? extends 和 ? super 通配符的特征,我们可以得出以下结论:
◆ 如果你想从一个数据类型里获取数据,使用 ? extends 通配符
◆ 如果你想把对象写入一个数据结构里,使用 ? super 通配符
◆ 如果你既想存,又想取,那就别用通配符。
这就是Maurice Naftalin在他的《Java Generics and Collections》这本书中所说的存取原则,以及Joshua Bloch在他的《Effective Java》这本书中所说的PECS法则。
Bloch提醒说,这PECS是指”Producer Extends, Consumer Super”,这个更容易记忆和运用。
Java通配符有两种
1、无限定通配符 形式<?>
2、限定通配符
上边界限定通配符 形式< ? extends Number> //用Number举例
下边界限定通配符 形式< ? super Number> //用Number举例
无限定通配符
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量的主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
限定通配符
界定通配符的上边界(向上造型一个泛型对象的引用)
Vector<?extends 类型1> x = new Vector<类型2>();
类型1指定一个数据类型,那么类型2就只能是类型1或者是类型1的子类
Vector<?extends Number> x = newVector<Integer>();//这是正确的
Vector<?extends Number> x = newVector<String>();//这是错误的
界定通配符的下边界(向下造型一个泛型对象的引用)
Vector<?super 类型1> x = newVector<类型2>();
类型1指定一个数据类型,那么类型2就只能是类型1或者是类型1的父类
Vector<?super Integer> x = new Vector<Number>();//这是正确的
Vector<?super Integer> x = new Vector<Byte>();//这是错误的
提示:限定通配符总是包括自己
存取原则和PECS法则
? extends 和 ? super 通配符的特征,我们可以得出以下结论:
◆ 如果你想从一个数据类型里获取数据,使用 ? extends 通配符
◆ 如果你想把对象写入一个数据结构里,使用 ? super 通配符
◆ 如果你既想存,又想取,那就别用通配符。
这就是Maurice Naftalin在他的《Java Generics and Collections》这本书中所说的存取原则,以及Joshua Bloch在他的《Effective Java》这本书中所说的PECS法则。
Bloch提醒说,这PECS是指”Producer Extends, Consumer Super”,这个更容易记忆和运用。
相关文章推荐
- Java 理论与实践: 使用通配符简化泛型使用
- Java 理论与实践: 使用通配符简化泛型使用
- Java 通配符泛型例子
- Java 通配符泛型例子
- java中泛型之类型通配符(?)
- Java 理论与实践:使用通配符简化泛型使用
- Java 泛型(二) 泛型之中的通配符(Wildcards)使用
- 初学Java,泛型类型通配符(三十七)
- Java 理论与实践: 使用通配符简化泛型使用
- 黑马程序员_java中泛型(通配符)与反射技术
- [转贴] Java 理论与实践: 使用通配符简化泛型使用
- java使用通配符简化泛型使用
- Java 理论与实践: 使用通配符简化泛型使用
- 18---java中泛型02(通配符)
- 在 Java 的泛型类型中使用通配符
- Java 理论与实践:使用通配符简化泛型使用,第 2 部分
- Java 理论与实践: 使用通配符简化泛型使用
- Java 理论与实践: 使用通配符简化泛型使用 (二)
- java中泛型之类型通配符(?)
- Java 泛型学习三 通配符