java 类型通配符_通配符类型
由于严格的泛型类型使用不方便,所以Java的设计者发明了一种巧妙但很安全的“解决方案”:通配符类型
通配符概念
在通配符类型中,允许类型参数发生变化。例如通配符类型Pair extends Employee>
表示任何泛型Pair类型,它的类型参数是Employee的子类,如Pair
假设有一个方法public static void printBuddies(Pair p),那么就不能将Pair传递给这个方法。
解决方法就是,使用一个通配符类型:public static void printBuddies(Pair extends Employee> p)。
类型Pair是Pair extends Employee>的子类。
Pair extends Employee>的方法如下:
? extend Employee getFirst(); // 可以使用getFirst,将getFirst的返回值赋给一个Employee引用是完全合法的
void setFirst(? extends Employee); // 不可能调用setFirst方法,因为编译器只知道需要Employee的某个子类,但不知道什么类型。所以拒绝传递任何特定的类型,比较?不能匹配
通配符的超类型限定
可以指定一个超类型限定,如下所示:? super Manager
这个通配符限制为Manager的所有超类。
带有超类限定的通配符和带有子类限定的通配符的行为相反,可以为方法提供参数,但是不能使用返回值。例如Pair super Manager>的方法如下:
void setFirst(? super Manager); // 编译器无法知道setFirst方法的具体类型,因此不能接受参数类型为Employee或者Object的方法调用。只能传递Manager类型的对象,或者某个子类对象
? super Manager getFirst(); // 不能保证返回对象的类型,只能把它赋给一个Object
带有超类限定的通配符允许你写入一个泛型对象,而带有子类限定的通配符允许你读取一个泛型对象
无限定通配符
例如,类型Pair>,有以下方法:
? getFirst(); // getFirst返回值只能赋给一个Object。
void setFirst(?); // setFirst方法不能被调用,甚至不能用Object调用。
Pair>和Pair本质不同在于:可以用任意Object对象调用原始Pair类的setFirst方法。
java 类型通配符_通配符类型相关推荐
- java地图点线面_点线面类型互转
点与线类型互转 SuperMap iDesktop Java 支持将点数据转为线数据,即通过把指定的连接字段值相同的点,按照 SmID 顺序连接成一个线对象,进而生成新的线数据集. 同时支持将线数据转 ...
- java 仓库类_仓库类型和功能分别是什么?
[判断题]差动放大器的两只三极管的性能参数必须完全一致 [判断题]蕨类植物是低等植物吗? [多选题]中国中国宗法制度包括:( ) [单选题]中国古代的宗法制产生于( ) [判断题]当运放单电源运用时, ...
- python 变量类型注释_变量类型、命名规则及代码注释
人类在纸上可以写数字,也可以写文字,用数字来计算,用文字来说话,在人类的意识里你写的东西代表不同的含义!同样,在程序里面我们也按照人的习惯来设计,因此就有了变量类型这种说法!任何语言都会涉及到变量类型 ...
- python 序列类型函数_序列类型可用的内置函数
python的内置函数有很多,以下列举一些序列类型的内置函数:如有雷同,仅供参考 1>enumerate( )函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数 ...
- 编译类型和运行时类型不同_不同类型的游戏
编译类型和运行时类型不同 All the games which we develop come under one of the various predefined categories, the ...
- 数据类型有自定义类型吗_自定义类型的数据表和数据集
数据类型有自定义类型吗 I think the Typed DataTable and Typed DataSet are very good options when working with da ...
- Java泛型总结---基本用法,类型限定,通配符,类型擦除
一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...
- java泛型程序设计——通配符类型+通配符的超类型限定
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 通配符类型+通配符的超类型限定 的知识: [1]通配符类型相关 1. ...
- java的数组是对象吗_在Java中数组是原始类型还是对象?
数组被视为Java中的对象.其背后的原因是可以使用'new'关键字创建数组." new"关键字/运算符始终用于创建对象.这就是将数组视为对象的方式. 任何数组的直接父类或超类是&q ...
- java创建node类型数据类型_[Java教程]js DOM Node类型
[Java教程]js DOM Node类型 0 2015-12-18 16:00:08 DOM(文档对象模型)是针对HTML和 DOM可以将任何HTML或 以下面为例: My article Hell ...
最新文章
- SCCM管理 - 更新部署
- odyssey react鉴定_Nike Odyssey React SHLD开箱测评 Nike Odyssey React SHLD实物欣赏
- 『操作系统』 进程的描述与控制 Part3 管程
- GDIPlus灰度化图像
- poj3422 Kaka's Matrix Travels(最小费用最大流问题)
- java函数调用约定_2020-09-04:函数调用约定了解么?
- 使用Visual Studio 2017创建React项目
- 申请企业邮箱有什么流程?
- Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(九)客户端使用
- 如何将NCM转换成MP3 - NCM转MP3转换软件
- 7-14 设计一个风扇Fan类 (20 分)
- D365 窗体的 Lookup写法
- 草履虫纳米机器人_草履虫大小的“微型机器人”或许能在人体组织中自由穿梭...
- 2022牛客寒假算法基础集训营4 B、 G两题
- webjar的详细使用方式
- 关于用c++写心理测试是有分支就行的事(这次是哈利波特分院帽)
- 苹果用什么蓝牙耳机好?适合苹果的音乐蓝牙耳机推荐
- 跟我学AngularJs:AngularJs入门及第一个实例
- GitHub上传自己的文件
- win7 nfs文件服务器,Win7 NFS 设置详解
热门文章
- 4月编程排行榜出啦~速看新变化~
- c#调用microsoft word将word另存为pdf
- Linux下报ora-12162,登录RMAN 报ORA-12162:TNS:net service name is incorrectly specified错误
- 如何将谷歌地图叠加到MapGIS三维地球场景
- python程序设计基础课后答案-python语言程序设计基础(第2版)课后答案嵩天
- 渗透测试工程师常见面试33题——应届生
- 聊聊激光雷达原理之i-TOF
- 汉印CP4000照片打印机体验
- 1.4亿在线背后-QQ IM后台架构的演化与启示(1)(2)
- kd树 python实现_Python语言描述KNN算法与Kd树