由于严格的泛型类型使用不方便,所以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 类型通配符_通配符类型相关推荐

  1. java地图点线面_点线面类型互转

    点与线类型互转 SuperMap iDesktop Java 支持将点数据转为线数据,即通过把指定的连接字段值相同的点,按照 SmID 顺序连接成一个线对象,进而生成新的线数据集. 同时支持将线数据转 ...

  2. java 仓库类_仓库类型和功能分别是什么?

    [判断题]差动放大器的两只三极管的性能参数必须完全一致 [判断题]蕨类植物是低等植物吗? [多选题]中国中国宗法制度包括:( ) [单选题]中国古代的宗法制产生于( ) [判断题]当运放单电源运用时, ...

  3. python 变量类型注释_变量类型、命名规则及代码注释

    人类在纸上可以写数字,也可以写文字,用数字来计算,用文字来说话,在人类的意识里你写的东西代表不同的含义!同样,在程序里面我们也按照人的习惯来设计,因此就有了变量类型这种说法!任何语言都会涉及到变量类型 ...

  4. python 序列类型函数_序列类型可用的内置函数

    python的内置函数有很多,以下列举一些序列类型的内置函数:如有雷同,仅供参考 1>enumerate( )函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数 ...

  5. 编译类型和运行时类型不同_不同类型的游戏

    编译类型和运行时类型不同 All the games which we develop come under one of the various predefined categories, the ...

  6. 数据类型有自定义类型吗_自定义类型的数据表和数据集

    数据类型有自定义类型吗 I think the Typed DataTable and Typed DataSet are very good options when working with da ...

  7. Java泛型总结---基本用法,类型限定,通配符,类型擦除

    一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...

  8. java泛型程序设计——通配符类型+通配符的超类型限定

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 通配符类型+通配符的超类型限定 的知识: [1]通配符类型相关 1. ...

  9. java的数组是对象吗_在Java中数组是原始类型还是对象?

    数组被视为Java中的对象.其背后的原因是可以使用'new'关键字创建数组." new"关键字/运算符始终用于创建对象.这就是将数组视为对象的方式. 任何数组的直接父类或超类是&q ...

  10. java创建node类型数据类型_[Java教程]js DOM Node类型

    [Java教程]js DOM Node类型 0 2015-12-18 16:00:08 DOM(文档对象模型)是针对HTML和 DOM可以将任何HTML或 以下面为例: My article Hell ...

最新文章

  1. SCCM管理 - 更新部署
  2. odyssey react鉴定_Nike Odyssey React SHLD开箱测评 Nike Odyssey React SHLD实物欣赏
  3. 『操作系统』 进程的描述与控制 Part3 管程
  4. GDIPlus灰度化图像
  5. poj3422 Kaka's Matrix Travels(最小费用最大流问题)
  6. java函数调用约定_2020-09-04:函数调用约定了解么?
  7. 使用Visual Studio 2017创建React项目
  8. 申请企业邮箱有什么流程?
  9. Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(九)客户端使用
  10. 如何将NCM转换成MP3 - NCM转MP3转换软件
  11. 7-14 设计一个风扇Fan类 (20 分)
  12. D365 窗体的 Lookup写法
  13. 草履虫纳米机器人_草履虫大小的“微型机器人”或许能在人体组织中自由穿梭...
  14. 2022牛客寒假算法基础集训营4 B、 G两题
  15. webjar的详细使用方式
  16. 关于用c++写心理测试是有分支就行的事(这次是哈利波特分院帽)
  17. 苹果用什么蓝牙耳机好?适合苹果的音乐蓝牙耳机推荐
  18. 跟我学AngularJs:AngularJs入门及第一个实例
  19. GitHub上传自己的文件
  20. win7 nfs文件服务器,Win7 NFS 设置详解

热门文章

  1. 4月编程排行榜出啦~速看新变化~
  2. c#调用microsoft word将word另存为pdf
  3. Linux下报ora-12162,登录RMAN 报ORA-12162:TNS:net service name is incorrectly specified错误
  4. 如何将谷歌地图叠加到MapGIS三维地球场景
  5. python程序设计基础课后答案-python语言程序设计基础(第2版)课后答案嵩天
  6. 渗透测试工程师常见面试33题——应届生
  7. 聊聊激光雷达原理之i-TOF
  8. 汉印CP4000照片打印机体验
  9. 1.4亿在线背后-QQ IM后台架构的演化与启示(1)(2)
  10. kd树 python实现_Python语言描述KNN算法与Kd树