泛型拾遗
主讲教师:王少华 QQ群:483773664
学习目标
- 掌握泛型方法与类型通配符的区别
- 泛型与方法重载
- 泛型与数组
一、泛型方法和类型通配符的区别
(一)大多数时候,可以使用泛型方法来替换类型通配符
比如这样一个需求:定义一个方法,接收一个任意集合,并打印出集合中的所有元素。泛型方法和类型通配符都可以实现
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
(二)有时候,我们可以同时使用泛型方法和通配符
1 2 |
|
当然上面的方法也可以改写成泛型方法
1 2 3 |
|
(三)类型可以定义变量
1 2 3 4 5 |
|
(四)set<E>只允许放E类型的元素,set<?>等于set<? extends Object>,只能取元素不能放元素
add(E)
二、泛型方法与方法重载
方法重载:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
(一)第一情况:泛型的上下限
因为泛型既允许设定通配符的上限,也允许设定通配符的下限
那么下面的二个方法是方法重载吗?
1 2 3 4 5 |
|
原因
1 2 3 4 5 6 7 8 |
|
编译器无法确定调用哪个方法了。
当然上面的二个方法在编译的时候,就无法通过了!
(二)泛型指定类型不一样
1 2 3 4 |
|
这种写法是不正确的,编译无法通过。
这是因为从Java语言层面来说,方法重载依赖于相同的方法名、不同的参数个数、类型、顺序,而List<Integer>和List<String>类型擦除后都为List<E>,从而不符合方法重载的要求。
注:
在jdk6及以下的版本,以下代码编译是会通过的,jdk7,编译不会通过,jdk8编译也会通过
1 2 3 4 5 6 7 |
|
三、泛型与数组