当前位置: 首页 > news >正文

Java学习苦旅(二十一)——泛型

本篇博客将详细讲解Java中的泛型。

文章目录

  • 泛型的定义
    • 语法
    • 示例
  • 泛型类
    • 语法
    • 示例
    • 类型边界
      • 语法
      • 示例
    • 类型擦除
    • 通配符
      • 语法
      • 示例
      • 上界
        • 语法
        • 示例
      • 下界
        • 语法
        • 示例
  • 裸类型
  • 泛型方法
    • 语法
    • 示例
  • 泛型的限制
  • 结尾

泛型的定义

语法

class 泛型类名称<类型形参列表> {//这里可以使用类型参数
}class 泛型类名称<类型形参列表> extends 继承类 {//这里可以使用类型参数
}

类型形参一般使用一个大写字面表示,常用名称有:

  • E表示Element
  • K表示Key
  • V表示Value
  • N表示Number
  • T表示Type
  • S,U,V表示第二、第三、第四个类型

示例

class MyArray<T> {public T[] objects = (T[]) new Object[10];public void set(int pos, T val) {objects[pos] = val;}public T get(int pos) {return objects[pos];}
}

泛型类

语法

泛型类<类型实参> 变量名; //定义一个泛型类引用
new 泛型类<类型实参> (构造方法实参); //实例化一个泛型类对象

示例

当编译器可以根据上下文推导出类型实参时,可以省略类型实参的填写

MyArray<String> list = new MyArray<>();

类型边界

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

语法

class 泛型类名称<类型形参 extends 类型边界> {...
}

示例

public class MyArray<E extends Number> {...
}

类型擦除

泛型是作用在编译期间的一种机制,实际上运行期间是没有这么多类的,因此存在类型擦除。例如:

class MyArray<T> {// T会被擦除为Object
}class MyArray<E extends Comparable<E>> {// E会被擦除为Comparable
}

类型擦除主要看其类型边界而定。

编译器在类型擦除阶段在做什么?

  1. 将类型变量用擦除后的类型替换,即 Object 或者 Comparable

  2. 加入必要的类型转换语句

  3. 加入必要的bridge method保证多态的正确性

通配符

语法

?用于泛型的使用,即为通配符。

示例

public class MyArray<T> {...
}public static void printAll(MyArray<?> list) {//可以传入任意类型的MyArray
}

上界

语法
<? extends 上界>
示例
public static void printAll(MyArray<? extends Number> list) {//可以传入类型实参是Number子类的任意类型的MyArray
}

下界

语法
<? super 下界>
示例
public static void printAll(MyArray<? super Integer> list) {//可以传入类型实参是Integer父类的任意类型的MyArray
}

注意:

MyArrayList<Object> 不是MyArrayList<Number>的父类型

MyArrayList<Number>也不是MyArrayList<Integer>的父类型

需要使用通配符来确定父子类型

MyArrayList<?>MyArrayList<? extends Number>的父类型 MyArrayList<? extends Number>MyArrayList<Integer>的父类型

裸类型

裸类型是一个泛型类但没有带着类型实参,例如:

MyArray list = new MyArray();

泛型方法

语法

方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) {...
}

示例

class A<T extends Comparable<T>> {public T findMax(T[] array) {T max = array[0];for (int i = 0; i < array.length; i++) {if (max.compareTo(array[i]) < 0) {max = array[i];}}return max;}//如果是静态方法public static<T extends Comparable<T>> T findMax(T[] array) {T max = array[0];for (int i = 0; i < array.length; i++) {if (max.compareTo(array[i]) < 0) {max = array[i];}}return max;}
}

泛型的限制

  1. 泛型类型参数不支持基本数据类型

  2. 无法实例化泛型类型的对象

  3. 无法使用泛型类型声明静态的属性

  4. 无法使用 instanceof 判断带类型参数的泛型类型

  5. 无法创建泛型类数组

  6. 无法 create、catch、throw 一个泛型类异常(异常不支持泛型)

  7. 泛型类型不是形参一部分,无法重载

结尾

本篇博客到此结束。
上一篇博客:Java学习苦旅(二十)——七大排序(JAVA代码)
下一篇博客:Java学习苦旅(二十二)——Map&Set

相关文章:

Java学习苦旅(二十一)——泛型

本篇博客将详细讲解Java中的泛型。 文章目录 泛型的定义语法示例 泛型类语法示例类型边界语法示例 类型擦除通配符语法示例上界语法示例 下界语法示例 裸类型泛型方法语法示例 泛型的限制结尾 泛型的定义 语法 class 泛型类名称<类型形参列表> {//这里可以使用类型参数…...

具备闭环思维的测试才更充分

测试工作的终极目标是为了保障产品的质量。如果用同一个维度衡量测试人员的业务水平&#xff0c;简单粗暴一些&#xff1a;那就是针对同一款产品&#xff0c;哪个测试人员发现的bug多&#xff0c;哪个测试人员的测试理论与实践水平相对来说还是高一些。 前两天组长在群里分析了…...

flask web学习之模板(一)

文章目录 一、模板基本用法1.1 定界符1.2 模板语法1.3 渲染模板 二、模板辅助工具2.1 上下文2.2 全局对象2.3 过滤器2.4 测试器2.5 模板环境对象 在动态web程序中&#xff0c;视图函数返回的HTML数据往往需要根据相应的变量&#xff08;比如查询参数&#xff09;动态生成。当HT…...

RedisInsight - Redis官方可视化工具

一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具&#xff0c;它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控&#xff0c;并且可以在界面上使用 CLI 和连接的 Redis 进行交互&#xff08;RedisInsight 内置对 Redis 模块支持&#…...

Matlab定义函数计算斐波那契数列

以下是使用 MATLAB 定义函数计算并输出斐波那契数列前 200 个数的示例代码&#xff1a; function result fibonacci(n)if n < 1 || n > 200result NaN;elseif n 1 || n 2result 1;elseresult fibonacci(n-1) fibonacci(n-2);end endn 200; result fibonacci(n)…...

计算机网络面试题总结

总结自Network | JavaGuide(Java面试 学习指南) 什么是OSI7层模型&#xff1f; 什么是TCP/IP 四层模型&#xff1f; 为什么网络要分层&#xff1f; 应用层有哪些常见的协议&#xff1f; 传输层有哪些常见的协议&#xff1f; 网络层有哪些常见的协议&#xff1f; 从输入…...

视频转为序列图的软件,让视频批量转为序列图

你是否曾经遇到过这样的困境&#xff1a;需要将一段视频转为一系列的图片&#xff0c;但却没有合适的工具来完成&#xff1f;或许你曾经手动截图&#xff0c;或者用其他方式&#xff0c;但结果往往不尽如人意&#xff0c;图片质量差、色彩失真、画面不清晰。现在&#xff0c;让…...

目标检测中的常见指标

概念引入&#xff1a; TP&#xff1a;True Positive IoU > 阈值 检测框数量 FP: False Positive IoU < 阈值 检测框数量 FN: False Negative 漏检框数量 Precision:查准率 Recall:查全率&#xff08;召回率&#xff09; AP&am…...

QT上位机开发(会员充值软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所有的控件当中&#xff0c;除了label、edit、radio、combobox和button之外&#xff0c;另外一个用的比较多的控件就是grid&#xff0c;也可称之为…...

小程序实现绘制图片 保存到手机

HTML <template><view><canvas canvas-id"myCanvas" :style"{height:380px,width:wWidthpx,background:#FFFFFF}"></canvas><view class"textCenter"><button click"saveCanvas">保存图片</b…...

Elasticsearch基本操作之索引操作

本文说下Elasticsearch基本操作之索引操作 文章目录 概述创建索引创建索引示例重复创建索引示例 查看索引查看所有索引查看单个索引 删除索引删除索引 概述 由于是使用命令来操作Elasticsearch&#xff0c;可以使用kibana&#xff0c;postman和apifox等工具 我使用了apifox来执…...

调用Java线程相关的API为什么能够控制操作系统线程?

今天我们解决Java线程的这五个问题&#xff1a; Java线程创建的完整流程 Java的线程是何时与JVM线程绑定的 JVM线程是何时与OS线程绑定的 Java线程对应的OS线程有什么特殊的地方 调用JavaAPI为什么能够操作OS线程 对于任何支持多线程的计算机语言来说&#xff0c;深入理解…...

【办公技巧】excel中设置选项按钮的方法

大家是否会遇到需要勾中选项的情况&#xff0c;我们可以在电子表格中制作出可以勾选、选中的选项按钮&#xff0c;今天我们一起学习一下设置方法。 首先&#xff0c;我们需要先在excel工具栏中添加一个功能模块&#xff1a;开发工具 依次点击excel中的文件 – 选项 – 自定义…...

如何编写高效的正则表达式?

正则表达式&#xff08;Regular Expression&#xff0c;简称regex&#xff09;是一种强大的文本处理技术&#xff0c;广泛应用于各种编程语言和工具中。本文将从多个方面介绍正则表达式的原理、应用和实践&#xff0c;帮助你掌握这一关键技术。 正则可视化 | 一个覆盖广泛主题…...

vue3中使用pinia,更改state中数据,试图不更新问题

直接上代码 使用computed&#xff0c;可以实现。...

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…...

从零开始搭建企业级前端项目模板(vue3+vite+ts)

文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本&#xff0c;项目安装eslint配置2.3 安装完成后&#xff0c;后面启动项目还缺少一些依赖&#xff0c;提前按需安装好 三&#xff0c;修改eslintrc.…...

ElasticSearch的DSL查询语法解析

Elasticsearch提供了基于ISON的DSL (Domain Specific Lanquage)来定义查询。 目录 一、常见查询类型 二、DSLQuery基本语法 三、全文检索查询 3.1 match查询&#xff1a;会对用户输入内容分词&#xff0c;常用于搜索框搜索 &#xff0c;语法&#xff1a; 3.2 multi match…...

Linux 常用基础命令(2024年最新篇)新手小白必看 初识Linux

CSDN 成就一亿技术人&#xff01; 2024年 借助这篇文章 重新整理Linux 基础常用命令 CSDN 成就一亿技术人&#xff01; 上命令 一 &#xff0c;Linux语法格式 学习命令要掌握命令的格式 command [options] [arguments] 命令 选项 参数 二&#xff0c;Linux基础…...

Golang中for和for range语句的使用技巧、对比及常见的避坑

前言 基础语法不再赘述&#xff0c;写这个原因是之前的某次面试被问道了&#xff0c;我知道会导致问题但具体答下来不是很通顺。再回想自己开发过程中&#xff0c;很多地方都是使用到了for/for range&#xff0c;但是却从没注意过一些细节&#xff0c;因此专门学习一下进行记录…...

从sipML5到现代框架:FreeSWITCH WebRTC客户端升级指南与选型建议

从sipML5到现代框架&#xff1a;FreeSWITCH WebRTC客户端升级指南与选型建议 如果你正在维护一个基于sipML5的FreeSWITCH WebRTC前端项目&#xff0c;可能已经感受到了技术债的压力——浏览器兼容性问题频发、功能扩展困难、社区支持几乎为零。这不是你的错&#xff0c;sipML5作…...

Axure Mac全汉化3步法:设计师效率提升实战指南

Axure Mac全汉化3步法&#xff1a;设计师效率提升实战指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 你是否曾…...

信创实践:Nacos 2.4.1 与人大金仓 Kingbase 的深度适配与性能调优

1. 为什么需要从MySQL迁移到人大金仓Kingbase&#xff1f; 最近几年&#xff0c;国产数据库的发展速度确实让人惊喜。作为一线开发者&#xff0c;我亲身体验了从MySQL迁移到人大金仓Kingbase的全过程。说实话&#xff0c;刚开始心里也没底&#xff0c;毕竟MySQL用得太顺手了。但…...

零基础玩转Llama-3.2-3B:Ollama部署+实战问答全流程

零基础玩转Llama-3.2-3B&#xff1a;Ollama部署实战问答全流程 1. 模型介绍与准备 1.1 Llama-3.2-3B模型概述 Llama-3.2-3B是Meta公司开发的多语言大型语言模型&#xff08;LLM&#xff09;&#xff0c;属于Llama 3.2系列中的3B参数版本。这个纯文本模型经过指令微调优化&am…...

基于Vue的沧交食堂食品监管系统[vue]-计算机毕业设计源码+LW文档

摘要&#xff1a;本文阐述了一个基于Vue框架开发的沧交食堂食品监管系统。该系统旨在借助现代Web技术&#xff0c;强化对沧交食堂食品安全的监管力度&#xff0c;提升监管效率与质量。系统涵盖了系统用户管理、新闻数据管理、食品相关业务管理以及评论管理等多方面功能。文章详…...

Qwen3.5-4B-Claude-Opus高性能推理教程:Q4_K_M量化下GPU吞吐量实测分析

Qwen3.5-4B-Claude-Opus高性能推理教程&#xff1a;Q4_K_M量化下GPU吞吐量实测分析 1. 模型概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B架构的推理蒸馏模型&#xff0c;特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该版…...

OpenClaw任务编排:用Qwen3.5-4B-Claude实现爬虫+分析闭环

OpenClaw任务编排&#xff1a;用Qwen3.5-4B-Claude实现爬虫分析闭环 1. 为什么需要自动化任务编排 去年我接手了一个市场调研项目&#xff0c;需要每周从20多个网站抓取产品价格数据&#xff0c;清洗后生成趋势图表。最初用Python脚本手动Excel处理&#xff0c;每次要花3小时…...

OpenClaw多模型切换实战:百川2-13B量化版与Qwen3-32B对比测试

OpenClaw多模型切换实战&#xff1a;百川2-13B量化版与Qwen3-32B对比测试 1. 为什么需要多模型切换&#xff1f; 去年夏天&#xff0c;当我第一次尝试用OpenClaw自动化处理日常工作时&#xff0c;发现一个有趣的现象&#xff1a;80%的简单任务&#xff08;如文件重命名、邮件…...

如何快速使用iOS App Signer:iOS应用签名完整指南

如何快速使用iOS App Signer&#xff1a;iOS应用签名完整指南 【免费下载链接】ios-app-signer DanTheMan827/ios-app-signer: 是一个 iOS 应用的签名工具&#xff0c;适合用于 iOS 开发中&#xff0c;帮助开发者签署和发布他们的 APP。 项目地址: https://gitcode.com/gh_mi…...

Comsol异构电池力电热耦合模型:探索电池的多场奥秘

comsol异构电池力电热耦合模型 采用椭圆型电极颗粒模拟锂离子正负极的电极颗粒&#xff0c;还原真实电池的3D介观结构&#xff0c;耦合电化学场-热场-力学场&#xff0c;可模拟电流&#xff0c;浓度&#xff0c;温度&#xff0c;应力等多场结果在电池研究领域&#xff0c;深入理…...