Java通配符(?):未知类型的使用以及泛型的类型擦除和泛型的的限制

2023/9/30 17:12:34

1.功能:
(1)用于参数,字段或局部变量的定义类型
(2)也可以作为返回类型

2.注意点:通配符不用于泛型方法调用,泛型实例创建以及超类型的类型参数

3.三类通配符
(1)上限有界通配符
如:List<? extends Number >list
(2)下限无界通配符
如:List <? super Integer >list
(3)无界通配符
如:List <?>list:
注:基于泛型类中不依赖于类型参数的方法,只能在这种情况下插入null
如:List list
注:基于Object类或子类提供的的方法

4.基于通配符建立泛型类或接口间关系
如:基于List不是List 子类型
List <? extends Integer >intList =new ArrayList <>();
List <? extends Number > numList =intList;

5.基于泛型的类型擦除
适用于无界参数类型,采用泛型或对象替换泛型类型中所有参数类型,生成的字节码仅包含普通类;
适用于插入类型铸件可以保持类型安全;
适用于可以生成桥接方法保留扩展泛型类型的多态性。
(1)擦除泛型类型:
Java编辑器对所有类型参数进行擦除,
其中对于有界类型参数进行替换并绑定为第一个类,
其中无界类型参数替换为Object
(2)擦除泛型方法:
替换同擦除泛型类型

6.泛型的限制:
(1)无法使用基本类型实例化泛型
(2)无法创建类型参数的实例
如:T t =new T();
但可义基于反射创建类型参数
Class cls
E t=cls.newInstance ();
(3)无法声明类型为类型参数的静态字段:
基于类的静态字段是类的所有非静态对象共享的类级变量,容易混淆共享的静态字段
如:static T os
(4)无法使用具有参数化类型的强制转换和instanceof:
理由:基于擦除泛型类型,运行时无法验证,
若使用无界通配符,则可以验证为哪一种集合
注意点:在某些情况下,编辑器知道类型参数始终有效,且允许强制转换
如:List li =…;
ArrayList l2=(ArrayList ) li;
(5)无法创建参数化类型数组:
理由:无法抛出所需ArrayStoreException
(6)无法创建、捕获、抛出参数化类型对象
理由:泛型类不能直接或间接扩展Throwable类
(7)擦除到原生类型的方法无法重载:
理由:类型擦除后具有相同签名


http://www.jnnr.cn/a/43773.html

相关文章

最小生成树(Prim、Kruskal)算法

目录 一、最小生成树的概念 二、最小生成树的应用 三、Kruskal算法 1、思想 2、步骤 3、代码 四、Prim算法 1、思路 2、步骤 3、代码 一、最小生成树的概念 一个图中可能存在多条相连的边,我们一定可以从一个图中挑出一些边生成一棵树。这仅仅是生成一棵树,还未满足最…

PTA - 数据库合集7(10题)

目录 10-12 查询所有学生的平均成绩(MSSQL) 10-14 查询平均成绩高于75分的学生(MSSQL) 10-15 查询未登记成绩的学生&#xff08;MSSQL&#xff09; 10-17 查询没有选修C语言课程的学生(MSSQL) 10-18 查询同专业的学生&#xff08;MSSQL&#xff09; 10-21 查询S001学生选修…

词典

总时间限制: 3000ms 内存限制: 65536kB 描述 你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运 的是&#xff0c;你有一本词典可以帮助你。 输入 首先输入一个词典&#xff0c;词典中包含不超过100000个词条&#xff0c;每个词条占据一行。 每一个词条包…

Java Web 12.3 Ajax 12.3.1 概述

Java Web 【黑马程序员新版JavaWeb基础教程&#xff0c;Java web从入门到企业实战完整版】 12 Filter & Listener & Ajax 文章目录Java Web12 Filter & Listener & Ajax12.3 Ajax12.3.1 概述12.3 Ajax 12.3.1 概述 AJAX (Asynchronous JavaScript And XML)…

神经网络 深度神经网络,深度神经网络训练

有哪些深度神经网络模型&#xff1f; 目前经常使用的深度神经网络模型主要有卷积神经网络(CNN) 、递归神经网络(RNN)、深信度网络(DBN) 、深度自动编码器(AutoEncoder) 和生成对抗网络(GAN) 等。 递归神经网络实际.上包含了两种神经网络。 一种是循环神经网络(Recurrent Neu…

青少年python系列 15.归并排序

青少年python系列目录_老程序员115的博客-CSDN博客 青少年python教学视频ppt源码 算法原理&#xff1a; 改归并排序将序列折半分成两个子序列&#xff0c;然后继续拆分&#xff0c;直到每个序列只有一个数据时&#xff0c;再将各个子序列排序后合并叠加。直到所有子序列都合并…

全网首次公开,阿里巴巴 1685 页 Java 面试突击核心讲(基础到高级足足涵盖 19 个 Java 核心技术)

互联网公司纷纷裁员&#xff0c;岗位招聘需求越来越少找工作的人却越来越多&#xff0c;如何在众多的应聘者中脱颖而出是我们每一个人都要考虑的问题。 对此 LZ 个人觉得要想在众多的应聘者中脱颖而出需要把握以下三点&#xff1a; 第一摸清现在的面试套路 第二清楚面的岗位不…

【Cmake】Ctest测试工具

目录 前言 一、初识CTest 二、使用方法 三、完整的简单测试工程 附录 附录一 cmake命令 enable_testing add_test 前言 原文&#xff1a;CTest - https://www.cnblogs.com/457220157-FTD/p/4139149.html 一、初识CTest CTest是CMake集成的一个测试工具&#xff0c;在使用CMakeL…

大数据入门之 Hadoop,HDFS,Hbase,Hive

经常听到这些大数据的名词, Hadoop,HDFS,Hbase,Hive等&#xff0c;这次就一探究竟。 Hadoop&#xff1a;是泛指大数据生态&#xff0c;实际上基本包括 存储(HDFS) 计算(MapReduce);HDFS: Hadoop分布式文件系统&#xff0c;主要是解决存储的问题;Hbase: 基于Hadoop的高性能nos…

ESP8266学习笔记(一)--搭建开发环境,并下载

环境介绍 使用安信可一体化开发环境&#xff1a;AiThinkerIDE_V0.5_Setup.exe 链接&#xff1a;https://pan.baidu.com/s/1LOlJHK3AXIia07YrQX8xVQ?pwdxnlo 提取码&#xff1a;xnlo AiThinkerIDE_V0.5_Setup.exe 下载后是个安装包。双击&#xff0c;选择提取路径后&#…

Java Web 12.1 Filter 12.1.4 Filter 拦截路径配置 12.1.5 Filter 过滤器链

Java Web 【黑马程序员新版JavaWeb基础教程&#xff0c;Java web从入门到企业实战完整版】 12 Filter & Listener & Ajax 文章目录Java Web12 Filter & Listener & Ajax12.1 Filter12.1.4 Filter 拦截路径配置12.1.5 Filter 过滤器链12.1 Filter 12.1.4 Fil…

常见的数据集合——栈

一、简介 栈(Stack)是一种特殊的线性数据集合&#xff0c;按照后进先出的规则进行操作&#xff0c;当我们在对栈进行入栈(push())或出栈(pop())操作时&#xff0c;只可以在栈顶进行操作。栈的实现结构可以是一维数组或链表来实现&#xff0c;用数组实现的栈叫作顺序栈&#x…

TypeScript 学习笔记(十万字超详细知识点总结)

&#x1f449; 订阅专栏学习TS不迷路&#xff1a;TypeScript从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;猿创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&#xff09; &#x1f3c6;分享博主自用牛…

PMP每日一练 | 考试不迷路-10.5(包含敏捷+多选)

每日5道PMP习题助大家上岸PMP&#xff01;&#xff01;&#xff01; ​1.项目经理领导着一支跨职能团队&#xff0c;包括其本⼈在内项目共有12名相关方。在创建沟通管理计划时&#xff0c;团队识别出 2 名额外的项目相关方。这 2 名额外的 项目相关方是产品经理和 PMO 经理。请…

旅行商问题的离散布谷鸟搜索算法

Discrete cuckoo search algorithm for the travelling salesman problem 摘要 本文提出了一种改进的离散杜鹃搜索&#xff08;CS&#xff09;算法&#xff0c;用于求解著名的旅行商问题&#xff08;TSP&#xff09;&#xff0c;这是一个NP难的组合优化问题。CS是一种元启发式…

SpringCloud Alibaba-Seata

SpringCloud Alibaba-Seata 1.Seata 基础 1.先看一个问题&#xff0c;引出 Seata 单机单库(多表)处理事务示意图 分布式微服务架构下的数据库事务示意图 梳理上图 用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持∶ 仓储服务∶对给定的商品扣除仓库/商品数量订…

公众号搜题接口-题库系统使用

公众号搜题接口-题库系统使用 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&am…

java基于springboot+vue车辆违章信息管理系统

本系统是一个在线车辆违章管理系统&#xff0c;系统分为前台和后台部分&#xff0c; 前台部分主要是让用户查询违章信息和学习交规知识使用的&#xff0c; 后台主要是让管理员对系统管理使用的。用户注册登录&#xff0c;查看交管资讯&#xff0c;查看警示教育信息&#xff0c;…

GB28181国标支持H.265编码吗?

好多开发者聊到GB28181的时候&#xff0c;不可避免的提到H.265编码国标平台是否支持&#xff1f;实际上&#xff0c;GB/T28181-2016里面&#xff0c;并未提及H.265编解码相关&#xff0c;具体参见以下说明&#xff1a; 视音频编/解码技术要求 联网系统中,对视音频编/解码的技…

如何使用事务

使用事务有两种方式&#xff0c;分别为 显式事务 和 隐式事务 。 显式事务 步骤1 START TRANSACTION 或者 BEGIN &#xff0c;作用是显式开启一个事务。 BEGIN;START TRANSACTION; START TRANSACTION 语句相较于 BEGIN 特别之处在于&#xff0c;后边能跟随几个 修饰符 &am…
最新文章