面试攻略,Java 基础面试 100 问(六)

JAVA 泛型

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本

质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法,

能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用 Java 泛型。

泛型方法(<E>

你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数

类型,编译器适当地处理每一个方法调用。

 // 泛型方法 printArraypublic static < E > void printArray( E[] inputArray ){for ( E element : inputArray ){System.out.printf( "%s ", element );}}
  • <? extends T>表示该通配符所代表的类型是 T 类型的子类。

  • <? super T>表示该通配符所代表的类型是 T 类型的父类。

泛型类 <T>

泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。和泛型方法一

样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,

也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,

这些类被称为参数化的类或参数化的类型。

public class Box<T> {private T t;public void add(T t) {this.t = t;
} public T get() {return t; 
}
13/04/2018 Page 113 of 283

类型通配符<?>

类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是

List<String>,List<Integer> 等所有 List<具体类型实参>的父类。

类型擦除

Java 中的泛型基本上都是在编译器这个层次来实现的。在生成的 Java 字节代码中是不包含泛

型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个

过程就称为类型擦除。如在代码中定义的 List<Object>和 List<String>等类型,在编译之后

都会变成 List。JVM 看到的只是 List,而由泛型附加的类型信息对 JVM 来说是不可见的。

类型擦除的基本过程也比较简单,首先是找到用来替换类型参数的具体类。这个具体类一般

是 Object。如果指定了类型参数的上界的话,则使用这个上界。把代码中的类型参数都替换

成具体的类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nohup Java -jar 生成的nohup.out 文件一直增加,如何处理

目录 1 实现 1 实现 除了使用echo "" > filename清空文件内容之外&#xff0c;还有其他几种方法可以删除文件中的内容而不删除文件本身&#xff1a;使用truncate命令&#xff1a;truncate命令可以用来截断文件并清空内容。使用以下命令清空文件内容&#xff1a;t…

程序的编译和调试

gcc编译器 gcc(GNU Compiler Collection)是GNU推出的多平台编译器&#xff0c;可将C、C源程序编译连接成可执行文件&#xff0c;支持以下后缀&#xff1a; .c c语言源代码 .h 程序所包含的头文件 .i 已经预处理过的C源代码文件 .s 汇编语言源代码文件 .o 编译后的目标文件…

解决SVN或GIT忽略提交文件的问题

背景 使用IDEA 的SVN插件提交文件是总是会提交一些不需要提交的文件; 我们可以通过一些简单设置忽略这些文件。 git 在项目根目录新建文本文件&#xff0c;修改后缀为.gitignore 文件中添加内容 *.iml .project .gradle/ .idea/ target/ build/ .vscode/ .settings/ .facto…

冒泡排序(c++题解)

题目描述 将读入的 N 个数从小到大排序后输出。 输入格式 第一行为一个正整数 NN。 第二行包含 N 个空格隔开的正整数 ai​&#xff0c;为你需要进行排序的数。 输出格式 将给定的 N 个数从小到大输出&#xff0c;数之间空格隔开&#xff0c;行末换行且无空格。 输入输出…

Elasticsearch:语义搜索 - Semantic Search in python

当 OpenAI 于 2022 年 11 月发布 ChatGPT 时&#xff0c;引发了人们对人工智能和机器学习的新一波兴趣。 尽管必要的技术创新已经出现了近十年&#xff0c;而且基本原理的历史甚至更早&#xff0c;但这种巨大的转变引发了各种发展的“寒武纪大爆炸”&#xff0c;特别是在大型语…

【html】学习记录

1.在建立一个页面的时候不是打开软件就开始写代码&#xff0c;要先规划好页面的布局框架&#xff0c;不然思想会很混乱&#xff0c;如做个人简历&#xff0c;要分区分块&#xff0c;把每个区域的内容搞清楚。 2.html的很多标签看上去作用都是一样的&#xff0c;但是实际有很大不…

SAP数据库表维护视图生成器的使用

在SAP中&#xff0c;经常需要自定义数据库表。而且可能需要人工维护数据库表中的数据&#xff0c;可以通过SM30进行维护数据&#xff1b;但是SM30事务的权限太大&#xff0c;不适宜将SM30直接分配&#xff1b;因此&#xff0c;可以通过给维护表分配事务代码&#xff0c;来达到控…

无涯教程-Perl - 环境配置

在开始编写Perl程序之前&#xff0c;让我们了解如何设置我们的Perl环境。 您的系统更有可能安装了perl。只需尝试在$提示符下给出以下命令- $perl -v 如果您的计算机上安装了perl&#xff0c;那么您将收到以下消息: This is perl 5, version 16, subversion 2 (v5.16.2) b…

MySQL数据库——DQL操作——基本查询

文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改&#xff0c;而其中数据的查询是使用最多&#xff0c;也…

同构多核架构(SMP)和异构多核架构(AMP)

同构多核架构&#xff08;SMP&#xff09;和异构多核架构&#xff08;AMP&#xff09;主要在两个角度上有区别&#xff1a; 处理器架构&#xff1a;在同构多核架构中&#xff0c;系统中的处理器在架构上是相同的&#xff0c;而异构多核架构则包含不同架构的处理器。运行模式&a…

Modbus TCP转Profinet网关modbus tcp转以太网

大家好&#xff0c;今天我们来聊一聊如何使用捷米特的Profinet转modbusTCP协议转换网关在博图上进行非透传型配置。 1, 首先&#xff0c;我们需要安装捷米特JM-TCP-PN的GSD文件&#xff0c;并根据现场设备情况配置modbusTCP地址。然后&#xff0c;在博图中添加该GSD文件&#x…

Redisson提供优秀的并发控制机制

1. JDK集合类 对于JDK的集合类&#xff0c;forEach方法其实并不能完全避免并发修改异常。 forEach本质上还是一个循环遍历&#xff0c;如果在循环体内直接对集合进行修改&#xff0c;仍然会产生ConcurrentModificationException。 例如&#xff1a; List<String> lis…

了解垃圾回收算法

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 垃圾回收&#xff08;Garbage Collect&#xff09;是Java语言中的一种自动内存管理机制&#xff0c;用于自动回收不再使用的对象所占用的内存空间。Java虚拟机会自动追踪和…

算法39:Excel 表列序号

一、需求 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1&#xff1a; 输入: columnTitle “A” 输出: 1 示例 2&…

Jenkins安装、配置、自动化构建前(nodejs)后端(maven)项目

文章目录 0、Jenkins卸载安装1、Jenkins配置2、后台启动脚本startup.sh3、后台关闭脚本stop.sh4、实时数据启动脚本startup.sh5、实时数据关闭脚本stop.sh6、jenkins制定完任务后&#xff0c;点击立即构建&#xff0c;控制台报错&#xff08;...无法生成父级目录&#xff09;7、…

uC-OS2 V2.93 STM32L476 移植:系统启动篇

前言 前两篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG 的 STM32L476RG 的 裸机工程&#xff0c;下载了 uC-OS2 V2.93 的源码&#xff0c;并把 uC-OS2 的源文件加入 Keil MDK5 工程 本篇适配 uC-OS2 的 系统定时器&#xff08;Systick&#xff09;与 PendSV_Handler&#xf…

python elasticsearch update by query

创建索引以及添加数据 PUT test {"mappings": {"properties": {"test":{"type": "nested"}} }}GET test/_mappingPUT test/_doc/1 {"test":{"name":"ellis","age":100} }elastics…

leetcode 763. 划分字母区间

2023.8.3 本题的关键是要确保同一字母需要在同一片段中&#xff0c;而这就需要关注到每个字母最后一次出现的位置。 思路&#xff1a;用一个哈希表保存每个字母&#xff08;26个&#xff09;最后一次出现的位置。然后从头遍历&#xff0c;不断更新最右边界&#xff0c;直到当前…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业 tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查…

[数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北

MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库&#xff0c;用于处理移动物体的轨迹数据。它提供了一组强大的工具&#xff0c;可以轻松地加载、分析和可视化移动物体的轨迹。通过使用MovingPandas&#xff0c;用户可以轻松地处理和分析移动对象数据&#x…