上限:<? extends T> ?是T和T的子类

下限:<? super T> ?是T和T的父类

怎么看待这个上限和下限呢 首先应该想 其实对于Java来说 <? extends T> <? super T> 是两个确定的类型,因为它不可能由你的赋值完了再确定吧。所以,对于<? extends T> 来说,集合里的元素应该是什么类型呢?应该是T类型,因为你添加的是T或者T的子类,设置为T就可以激发多态了。是了,所以你也只能从这个集合中取出T类型,因为它里面的元素本来设置的就是T类型,你赋值进去只不过是将T的子类赋值给了T,多态。但是呢,你就不能给这个集合里添加元素了,因为这个集合里元素的类型是T,假如可以添加元素,你初始化的时候初始化成T的一个子类,然后添加值的时候,却添加的另一个子类,事实上是可以添加的,因为集合元素类型是T,但里面就有了多种T的子类,好了,你初始化的时候是这个子类,你取出元素的时候肯定也想着取出的是可以给这个子类赋值的类型,但很有可能取出来的是T的另一个子类,你没法赋值,因为你允许添加另一个子类。所以一开始就禁止添加元素是对的。

<? super T>里面的元素,应该设置为什么呢?显然应该是object,因为系统不知道你会把?当成什么,所以只能设置成object,所以你取出元素的时候,取出的是object类。可不可以添加元素呢?可以,因为下限有保证,所以可以添加T和T的子类。你初始化的时候,初始化的是T的某个父类,好了,你现在取元素,你希望取出的是你初始化的那个父类,因为你只能添加T和T的子类,所以你取出的元素,肯定可以赋值给那个父类。

综上,<? extends T> 不可以添加元素,但可以取出类型为T的元素。 <? super T> 可以添加T或者T的子类,取出的一定是object类。

Java的泛型中,通配符可以设置上限和下限的更多相关文章

  1. Java笔记2 : 泛型的体现,及其上限、下限、通配符

    Java中的泛型是在jdk5.0引入的,语法不难,但是需要注意的细节有很多,这里写一下备忘. 首先是最简单的泛型类,泛型方法,泛型接口: //泛型接口的定义 interface MyInter< ...

  2. Java泛型学习笔记 - (七)浅析泛型中通配符的使用

    一.基本概念:在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类:1. 无边界的通配符(Unbounded Wildcards), 就是<?>, 比如List< ...

  3. Java 为 Excel 中的行设置交替背景色

    在制作Excel表格时,通过将数据表中上下相邻的两行用不同的背景色填充,可以使各行的数据看起来更清楚,避免看错行,同时也能增加Excel表格的美观度.本文将介绍如何在Java程序中为 Excel 奇数 ...

  4. Java 得到泛型中得到T.class

    Class <T> entityClass = (Class <T>) ((ParameterizedType) getClass().getGenericSuperclass ...

  5. Java包名称中通配符的含义

    "com.abc 表示的意义为:系统从com.abc这个包及其子孙包扫描组件 "com.abc.* 表示的意义为:系统从com.abc这个包的子孙包扫描组件

  6. Java泛型-通配符的上限和下限问题

    Java的泛型中,通配符可以设置上限和下限. 上限:<? extends T> ?是T和T的子类 下限:<? super T> ?是T和T的父类 怎么看待这个上限和下限呢 首先 ...

  7. JAVA 泛型中的通配符 T,E,K,V,?

    前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据 ...

  8. 【转】聊一聊-JAVA 泛型中的通配符 T,E,K,V,?

    原文:https://juejin.im/post/5d5789d26fb9a06ad0056bd9 前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型 ...

  9. Java集合与泛型中的几个陷阱,你掉进了几个?

    下面我总结了集合.泛型.数组转集合等一些常见的陷进,认真看完,相信你绝对有所收获. 1.List ,List<?> 与 List<Object> 有区别吗? 说实话,我敢保证很 ...

随机推荐

  1. 在Windows上安装FFmpeg程序

    原文地址:http://helloway.blog.51cto.com/7666282/1642247 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它提供了录 ...

  2. centOS7下SVN的安装和使用

    1. 安装 CentOS通过yum安装subversion. # yum install subversion  subversion安装在/bin目录: # which svnserve #查看目录 ...

  3. 单链表之一元多项式求和C++实现

    单链表之一元多项式求和 一元多项式求和单链表实现伪代码 1.工作指针 pre.p.qre.q 初始化2.while(p 存在且 q 存在)执行下列三种情况之一: 2.1.若 p->exp < ...

  4. 牛可乐发红包脱单OI赛 C 小可爱表白

    打个暴力查一下OEIS,5min做完 出题人一开始把式子打错了,一开始的式子的结果为$n * (n + 3) * 2^{n - 3}$ 我们考虑化式子 首先考虑 $\sum\limits_{j = 1 ...

  5. 浅谈 PHP 中的多种加密技术及代码示例

    信息加密技术的分类 单项散列加密技术(不可逆的加密) 属于摘要算法,不是一种加密算法,作用是把任意长的输入字符串变化成固定长的输出串的一种函数 MD5 string md5 ( string $str ...

  6. ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS

    B. Om Nom and Dark Park Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  7. C++源码里没有./configure文件的问题

    使用autoreconf软件来进行生成即可,在命令行输入autoreconf -vi,注意:前提要安装这个软件yum install autoconf.

  8. VS中运行HTTP 无法注册URL

    参考资料 http://www.java123.net/detail/view-449670.html http://www.cnblogs.com/jiewei915/archive/2010/06 ...

  9. python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码

    前言 urllib.parse 里面三个方法:urlencode,quote,unquote详解. 在做接口自动化过程中,http协议在发送url的时候,是以urlencode的编码格式传过去的,通常 ...

  10. mysql批量insert速度超慢

    在进行大批量数据insert的时候,我使用的是hibernate的进行save,而数据库采用mysql.但是在save的时候,速度很慢.         刚开始以为是MYSQL进行DNS解析的问题,于 ...