文档章节

有关JAVA泛型的笔记`

pior
 pior
发布于 2014/09/05 13:49
字数 410
阅读 2
收藏 0

 

 

以下的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类型

 

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

 

 

 

本文转载自:http://pior.iteye.com/blog/1166658

pior
粉丝 27
博文 151
码字总数 22496
作品 0
济南
高级程序员
私信 提问
Scala学习笔记(1):Scala语言的来源

Scala是“scalable language”,也就是“可扩展”语言是意思。Scala是一种静态类型语言,它融合了函数式编程和面向对象编程和的思想,前者让它可以很方便快速地构建可用程序,后者则让其具有...

chengyao2
2013/04/28
688
0
Java ThreadLocal 类的知识点解读

说起 Java 中的 ThreadLocal 类,可能很多安卓开发人员并不是很熟悉,毕竟很少有使用到的地方。但是如果你仔细分析过 Handler 源码的话,就一定见过这个类的出现。而 Handler 机制又是安卓知...

亦枫
2018/10/29
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
Kotlin 泛型 VS Java 泛型

建议先阅读我的上一篇文章 -- Java 泛型 和 Java 泛型一样,Kotlin 泛型也是 Kotlin 语言中较难理解的一个部分。Kotlin 泛型的本质也是参数化类型,并且提供了编译时强类型检查,实际上也是伪...

JohnnyShieh
2018/06/11
0
0
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.5K
30

没有更多内容

加载失败,请刷新页面

加载更多

哪些情况下适合使用云服务器?

我们一直在说云服务器价格适中,具备弹性扩展机制,适合部署中小规模的网站或应用。那么云服务器到底适用于哪些情况呢?如果您需要经常原始计算能力,那么使用独立服务器就能满足需求,因为他...

云漫网络Ruan
今天
5
0
Java 中的 String 有没有长度限制

转载: https://juejin.im/post/5d53653f5188257315539f9a String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西...

低至一折起
今天
15
0
OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
11
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
9
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部