目录
? extends U
? super L
总结一下:
? extends U
其中extends意思为:扩大;扩展;延长,?我们可以把他看作一个通配符,匹配所有的接口,U就一个泛型占位符,所以连在一起可联想到,从U扩张到全部的意思,那实际的意思是什么那?
就是已U作为下限,扩展到所有实现了U接口的接口,类。
举例:
1 创建下面4个接口
package com.scm.myblog.utils.cs;
public interface A1 {
String getName(String name);
}
------------------------
package com.scm.myblog.utils.cs;
public interface A2 {
String getName2(String name2);
}
-------------------------
package com.scm.myblog.utils.cs;
public interface B1 extends A1,A2{
String getNameB1(String nameB1);
}
-------------------------
package com.scm.myblog.utils.cs;
public interface C1 extends B1{
String getNameC1(String nameC1);
}
2 创建一个测试类
package com.scm.myblog.utils.cs;
import java.util.ArrayList;
import java.util.List;
public class CS{
public static void main(String[] args) {
List<? extends B1> testUpper;
testUpper=new ArrayList<B1>();
testUpper=new ArrayList<A1>();
testUpper=new ArrayList<A2>();
testUpper=new ArrayList<C1>();
}
}
我们验证我们的解释,从B1开始,到所有实现,继承了它的接口,类都可以作为泛型参数传入。
? super L
其中super意思为:超级的顶级的,?我们可以把他看作一个通配符,匹配所有的接口,L就一个泛型占位符,所以连在一起可联想到,从L作为顶级,到L之下的所有意思,那实际的意思是什么那?
就是已L作为上现,扩展到L所实现,继承的所有的接口,类。
我们替换代码
package com.scm.myblog.utils.cs;
import java.util.ArrayList;
import java.util.List;
public class CS{
public static void main(String[] args) {
List<? super B1> testUpper;
testUpper=new ArrayList<B1>();
testUpper=new ArrayList<A1>();
testUpper=new ArrayList<A2>();
testUpper=new ArrayList<C1>();
}
}
结果如此,我们也得出结论,使用super,就是从B1开始,到B1所继承的,实现的所有的接口,类
总结一下:
<? extends U>:表示从U开始到所有实现,继承了U的类,接口
<? super L> :表示从L开始,到所有被L继承,实现的所有的类,接口
那么他们起到了什么作用?
1 规范泛型的界限,更加的安全
2 清晰的继承,实现关系,方便扩展
需要深入学习的看
(1条消息) Java泛型:<? extends XXXX> 中的? 和 extends 的理解和使用实例_请叫我大师兄_的博客-CSDN博客