Java泛型知识点整理

2023-11-10

Java泛型知识点整理

Java泛型

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用Java 泛型。

泛型方法<E>

泛型方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

public 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; 
    }
}

类型通配符?

类型通配符一般是使用?代替具体的类型参数。例如 List<?> 在逻辑上是List<String>,List<Integer> 等所有List<具体类型实参>的父类。

类型擦除

Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。如在代码中定义的List<Object>和List<String>等类型,在编译之后都会变成List。JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。 类型擦除的基本过程也比较简单,首先是找到用来替换类型参数的具体类。这个具体类一般是Object。如果指定了类型参数的上界的话,则使用这个上界。把代码中的类型参数都替换成具体的类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java泛型知识点整理 的相关文章

  • PAT-哈夫曼树(list、collection)

    Huffuman树 qdulq 40 分 Huffman树在编码中有着广泛的应用 在这里 我们只关心Huffman树的构造过程 给出一列数 pi p0 p1 pn 1 用这列数构造Huffman树的过程如下 1 找到 pi 中最小的两个数
  • 加密套件ECDHE_SM2_WITH_SM4_SM3及握手分析

    应证监局要求 国内金融产品程序化交易软件应采用国密算法实现SSL TLS通讯 我司采用开源项目GmSSL2 0实现 加密套件选用ECDHE SM2 WITH SM4 SM3 其中协议版本为TLS1 2 密钥交换 Key Exchange 算
  • Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    http blog csdn net boonya article details 70157820 Mybatis与JDBC批量插入MySQL数据库性能测试 Author boonya Date 2017 04 13 1 背景 系统中需要
  • 每日一题(设计循环队列)

    每日一题 设计循环队列 622 设计循环队列 力扣 LeetCode 1 题意解读 本题只能为队列开辟k个单位空间 并且只能利用这几个空间进行数据的存储 思路 本题使用数组来实现队列是比较方便的 首先定义两个变量 front和rear变量
  • 分组数据方差公式_用Excel算分组方差《excel怎么求分组的数据的标准差》

    现在等excel求分组数据标准差 在excel中求数据的标准以按照以下步行操作 步 打开excel表格 将需要求的一列数输入表格中 如下图 如果你要将所求的结果放在这一列数的最下面 你就将鼠标放在这一列数的最后面的单元格点击 第二步 选定工
  • 【GCC】gcc编译器的使用

    gcc编译器的使用 一 gcc编译过程 精简 1 gcc使用示例 2 执行 gcc o hello hello c v 时 可以查看到这些步骤 3 可以手工执行以下命令体验一下 二 gcc常用编译选项 三 怎么编译多个文件 四 制作 使用动
  • 内存对齐,导致char型数组指针转化为float型指针出现的问题

    前阵子在做一个无线调参软件时 需要把一个float型的变量从上位机 qt平台编写 发给下位机 stm32 然后我采取的做法是将储存float变量的四个字节里面的数据通过串口以此发给下位机 然后下位机用一个char 4 数组进行接收 然后将c
  • [QT入门篇]编程基础知识

    一 坐标体系 在 Qt 中窗口的显示是需要指定位置的 这个位置是通过坐标来确定的 所有坐标的选取都是基于坐标原点来确定的 Qt的坐标原点在窗口的左上角 在一个 Qt 窗口中一般都有很多子窗口内嵌到这个父窗口中 其中每个窗口都有自己的坐标原点
  • Python-Pytorch框架-实现AI自动瞄准(下)

    OpenCV与Ptorch框架搭建一个利用目标骨骼关键点检测实现AI自动瞄准的娱乐项目 该项目仅供学习OpenCV Ptorch框架 游戏自动化等参考 该项目思路大致分为如下步骤 利用Pywin32以及OpenCV获取游戏窗口图像 数据集获
  • The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler

    今天使用Spring mvc 尝试文件的上传下载 URL 访问的时候 报如下错误 Type Exception Report Message No adapter for handler com cbss FileUploadControl
  • 【docker】一、入门(kali linux下安装与命令)

    目录 1 什么是docker 2 docker中三个概念 仓库 镜像 容器的理解 3 安装 4 kali命令集 5 docker info有一个小警告 WARNING No swap limit support 6 docker命令集 7
  • 在centos7.6编译kurento

    一 前期准备 1 1 升级boost库 我升级的版本1 65 0 解决后面编译找不到宏定义错误 boost库需要手动编译 网上一大坨 1 2 安装按各种依赖库 通过yum安装即可 libevent libevent devel gettex
  • 【C语言】初阶测试 (带讲解)

    目录 选择题 1 下列程序执行后 输出的结果为 2 以下程序的输出结果是 3 下面的代码段中 执行之后 i 和 j 的值是什么 4 以下程序的k最终值是 5 以下程序的最终的输出结果为 6 下列描述中正确的是 7 C 语言规定 在一个源程序
  • Java经典面试题详解:nextclouddocker部署

    kafka面试基础 17 1 Kafka的用途有哪些 使用场景如何 2 Kafka中的ISR AR又代表什么 ISR的伸缩又指什么 3 Kafka中的HW LEO LSO LW等分别代表什么 4 Kafka中是怎么体现消息顺序性的 5 Ka
  • 什么是lambda函数?使用lambda函数有什么好处?

    一 什么是lambda函数 Python支持一种有趣的语法 它允许你快速定义单行的最小函数 这些叫做lambda的函数是从Lisp中借用来的 可以被用在任何需要函数的地方 lambda 函数是一个可以接收任意多个参数 包括可选参数 并且返回
  • 使用C/C++编程控制LEGO EV3

    环境搭建 1 安装Eclipse 选择Eclipse IDE for C C Developers 网址 http www eclipse org downloads 2 安装c4ev3 网址 https c4ev3 github io 该
  • Vue项目更改项目图标

    Vue项目更改图标 Vue新建项目后会有默认图标 如下图左上角 方法一 替换图标图片 找到public文件下的favicon ico 把自己的图标替换掉favicon ico 修改成功 方法二 更换图标路径 找到public文件 把要加的图
  • vray渲染不了 全白_救急!!! vray for sketchup 渲染出来全白 !!求解决。。。重金...

    你说的白强是不是打的VR灯光啊 如果是把VR灯光勾成不可见 另外总体看你的灯光太亮了 调低即可 追问有时候我用Vray渲染 它有一个等待的时间 但是等完了又什么都没生成 就像我刚才没使用一样 这个是为什么呢 难道是有些不合理的地方 比如我在

随机推荐

  • c++模板元

    模版元 主要解决递归加速 单纯的递归会反复调用 函数等待 返回 所需时间多 模版元编译的时候慢 代码会增加 把运行时间节约在编译时 template
  • 深度解析V-REP Remote API (MATLAB) 的应用

    OS Win10 x64 V REP V REP PRO EDU 3 5 0 MATLAB 2016b 下面我们来聊一聊V REP中MATLAB远程API的应用 如果你只对V REP有基本了解 对V REP的远程API不熟悉 强烈建议你先阅
  • LeetCode高频算法刷题记录10

    文章目录 1 旋转图像 中等 1 1 题目描述 1 2 解题思路 1 3 代码实现 2 组合总和 中等 2 1 题目描述 2 2 解题思路 2 3 代码实现 3 回文链表 简单 3 1 题目描述 3 2 解题思路 3 3 代码实现 4 字符
  • 基于YOLOv5的血细胞识别和计数

    VOC格式标注转为yolov5格式 原数据格式是xml文件对目标细胞注释 现在需要将这种注释转换为yolov5所需的格式 即每个图像对应一个txt文件 文件中存储该图像中全部细胞的类别和坐标 一行存储一个细胞的信息 如下图 编写脚本进行注释
  • [Unity]各种Debug方法笔记

    无论是萌新还是Dalao 遇到Bug总是难免的 拒绝反驳 所以一些好的Debug方法就显得尤为重要 这篇文章既写给自己 也给看到文章的大家一个参考 内容主 quan 要 bu 是脚本的Debug方法 ps 如有出错漏记得以我能看到的方式指出
  • COCO数据处理(二)根据自己提取的类的json文件生成对应的mask二值图并画在原图上

    文章目录 COCO数据集根据json文件生成mask二值图 文件目录 目录说明 代码 一 生成mask图 代码 二 将mask图画在原图上 效果图 COCO数据集根据json文件生成mask二值图 文件目录 目录说明 data coco a
  • java中JDBC当中请给出一个DataSource的HelloWorld例子

    马克 to win 在前面 的jdbc的Helloworld程序当中 我们用DriverManager来获取数据库连接 事实上通过这种方法获取数据库连接 是比较耗费计算机资 源的 当然了 这也是没有办法的事儿 就像我们买贵书必须花大价钱一样
  • 【Android】App开发-布局篇

    UI的开发离不开各个组件的精准布局 在我们学习了控件之后 控件篇 我们就需要对这些控件进一一排布 让它们在各个指定的位置 目录 LinearLayout线性布局 RelativeLayout布局 FrameLayout布局 TableLay
  • 【Python爬虫】将爬下来的数据保存到redis数据库里面

    redis库中的Redis类对Hash数据类型操作的常用方法 方法名 具体说明 hset name key value 哈希中添加一个键值对 hmset name mapping 设置哈希中的多个键值对 hmget name keys ar
  • 逻辑架构和物理架构

    逻辑架构和物理架构 理论上划分了5种架构视图 分别是 逻辑架构 开发架构 运行架构 物理架构 数据架构 逻辑架构 逻辑架构关注的是功能 包含用户直接可见的功能 还有系统中隐含的功能 或者更加通俗来描述 逻辑架构更偏向我们日常所理解的 分层
  • HTML学习(二)HTML基础

    以这个为例 h1 我的第一个标题 h1 p 我的第一个段落 p DOCTYPE 前用来申明这是一个html 这里的html不区分大小写 HTML标题 HTML 标题 Heading 是通过 h1 h6 标签来定义的 h1 1级标题 h1 H
  • R语言优雅地修改列名称

    R语言优雅地修改列名称 在R语言中 修改数据框 DataFrame 或矩阵 Matrix 的列名称是一项常见的任务 通过优雅地修改列名称 可以提高代码的可读性和可维护性 在本文中 我将介绍几种优雅的方法来修改列名称 并提供相应的源代码示例
  • GPU计算

    文章目录 GPU计算 1 GPU和CPU的区别 2 GPU的主要参数解读 3 如何在pytorch中使用GPU 4 市面上主流GPU的选择 GPU计算 1 GPU和CPU的区别 设计目标不同 CPU基于低延时 GPU基于高吞吐 CPU 处理
  • 95-34-025-Context-AbstractChannelHandlerContext

    文章目录 1 概述 2 继承体系 3 类签名 4 关键字段 5 构造方法 6 ChannelRead事件 6 1 findContextInbound 7 invokeHandler 1 概述 2 继承体系
  • tensorrt转换模型进行了哪些操作

    对于网络layer graph进行的操作 消除输出未使用的层 消除相当于无操作的操作 卷积 偏置和ReLU运算的融合 具有足够相似参数和相同源张量的运算聚合 例如 GoogleNet v5的初始模块中的1x1卷积 inception结构中同
  • DW9718AF.c

    Copyright C 2015 MediaTek Inc This program is free software you can redistribute it and or modify it under the terms of
  • ERP系统总体解决方案 附下载地址

    企业资源计划即 ERP Enterprise Resource Planning 由美国 Gartner Group 公司于1990年提出 企业资源计划是 MRP II 企业制造资源计划 下一代的制造业系统和资源计划软件 除了MRP II
  • 大数据学习框架及指南

    Hadoop生态圈 一 采集 数据从哪里来 主要包括flume等 一 存储 海量的数据怎样有效的存储 主要包括hdfs Kafka 二 计算 海量的数据怎样快速计算 主要包括MapReduce Spark storm等 三 查询 海量数据怎
  • 数据结构与算法笔记2(线性表)

    1 线性表 1 1线性表是一种逻辑关系 见绪论 1 2定义 是具有相同类型的n个元素的有限序列 其中n为表长 n 0时为空表 关键词 相同类型 一般处理的数据元素都是相同类型 比如一个人那么都是人 而不会把人与车放在一起 关键词 有限序列
  • Java泛型知识点整理

    Java泛型知识点整理 Java泛型 泛型提供了编译时类型安全检测机制 该机制允许程序员在编译时检测到非法的类型 泛型的本质是参数化类型 也就是说所操作的数据类型被指定为一个参数 比如我们要写一个排序方法 能够对整型数组 字符串数组甚至其他