博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有关JAVA泛型的笔记`
阅读量:6672 次
发布时间:2019-06-25

本文共 1188 字,大约阅读时间需要 3 分钟。

  hot3.png

 

 

以下的4种都是可以通过的``

 

 

List<? extends A> list1 = new ArrayList<A>();

List<? extends A> list2 = new ArrayList<B>();

List<? super B> list3 = new ArrayList<B>();

List<? super B> list4 = new ArrayList<A>();

 

但应用起来使用extends 和super 有很大的差别

 

list1.add(new A());//非法,无法知道list1里内放的到底是A的哪一个子类,无法推断出类型

list1.add(new B());//非法,同上

A a1 = list1.get(0);//OK

B b1 = list1.get(0);//非法,无法从父类自动转换到子类

list3.add(new Object());//非法,list1里内存类型可能是从B到Object之间的某一级类,无法从父类Object自动转换到子类

list3.add(new A());//非法,同上

list3.add(new B());//OK

A a3 = list3.get(0);//非法,返回值类型为Object

Object b3 = list3.get(0);//OK

 

同样的对于泛型方法

 

public static <T extends A,S> Map<T, S> get(List<T> list,Vector<S> vector,List<? super B> listSuper) {

 

T tc =  list.get(0);//OK

A ta =  list.get(0);//OK

list.add(tc);//非法,无法自动将A转换为其子类

list.add(ta);//非法,无法自动将A转换为其子类

S s =vector.get(0);//OK

vector.add(s);//OK

listSuper.add(new B());//OK

listSuper.add(new Object());//非法,listSuper里内存类型可能是从B到Object之间的某一级类,无法从父类Object自动转换到子类

B b = listSuper.get(0);//非法,无法自动将B的父类转换为B类

Object obj = listSuper.get(0);//OK

return new HashMap<T, S>();

}

 

 

Java不支持<T super B>来给类或方法定义泛型,是因像上面listSuper一样`赋值只能是B类型,而取值只能是Object类型

 

这样定义的类型没法实现对象的操作`

 

 

 

转载于:https://my.oschina.net/piorcn/blog/310557

你可能感兴趣的文章
C++编译器优化
查看>>
golang slice append 后 capacity 增长的算法
查看>>
MP3转换AAC格式哪个音频转换器好
查看>>
黑苹果装机记录
查看>>
Xamarin.Forms vs Xamarin Native
查看>>
企业服务,赛道决定路径
查看>>
CNCF多元化奖学金系列:让微服务、Kubernetes和云原生连接
查看>>
2018-2019年中国CDN市场发展报告:阿里云成为中国CDN市场的领军者
查看>>
教你如何快速将音频文件AAC转换成MP3格式
查看>>
Web前端开发标准规范
查看>>
106. Construct Binary Tree from Inorder and Postorder Traversal
查看>>
如何导入golang.org的包
查看>>
软件测试的艺术第六章总结
查看>>
有关微信域名被拦截的经验分享
查看>>
常用数据结构
查看>>
在Antd-Pro下实现文件下载
查看>>
基于Nodejs的前端灰度发布方案_20190228
查看>>
解决Jenkins可选插件列表为空提示“connect time out”问题
查看>>
RN基础
查看>>
304. Range Sum Query 2D - Immutable
查看>>