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

Java基础之泛型

Java基础之泛型

  • 一、泛型应用范围
  • 二、使用泛型方法
  • 三、泛型类

一、泛型应用范围

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

使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序

二、使用泛型方法

  • 在方法的返回类型之前声明类型参数: 泛型方法的类型参数声明应该在方法的返回类型之前,使用尖括号括起来。
public <T> void methodName(T parameter) {// 方法实现
}
  • 使用泛型类型参数: 在方法的参数列表、返回类型或方法体中,可以使用泛型类型参数来表示参数类型或返回类型
public <T> T someMethod(T input) {// 方法实现return input;
}
  • 类型参数可以有任意名称: 泛型方法中的类型参数可以使用任意合法的标识符名称。通常,使用单个大写字母(如 TEKV 等)表示类型参数是一种常见的惯例。
public <E> void processElement(E element) {// 方法实现
}
  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • - 表示不确定的 java 类型
  • 泛型方法可以有多个类型参数: 泛型方法可以有多个类型参数,这些参数在尖括号中逗号分隔。
public <T, U> void processPair(T first, U second) {// 方法实现
}
  • 类型参数的范围(bounded type parameters): 类型参数可以被限制为某个特定的类或接口,以确保方法能够使用特定类型的方法或属性。这称为类型参数的边界。
public <T extends Number> void processNumber(T number) {// 方法实现
}
  • 泛型方法可以在泛型类或非泛型类中定义: 泛型方法不一定要在泛型类中定义,它可以在普通类中定义,或者在泛型类中定义,或者在接口中定义。
// 在普通类中定义泛型方法
public class MyClass {public <T> void myMethod(T parameter) {// 方法实现}
}// 在泛型类中定义泛型方法
public class MyGenericClass<T> {public <U> void myMethod(U parameter) {// 方法实现}
}// 在接口中定义泛型方法
public interface MyInterface {<T> void myMethod(T parameter);
}

代码示例

public class GenericMethodExample {// 泛型方法,接受任意类型的数组并打印public <T> void printArray(T[] array) {for (T element : array) {System.out.print(element + " ");}System.out.println();}// 泛型方法,接受任意类型的参数并返回public <T> T identity(T input) {return input;}// 泛型方法,使用类型参数的边界public <T extends Number> double square(T number) {return Math.pow(number.doubleValue(), 2);}public static void main(String[] args) {GenericMethodExample example = new GenericMethodExample();// 调用泛型方法,传入不同类型的数组Integer[] intArray = {1, 2, 3, 4, 5};Double[] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5};String[] stringArray = {"one", "two", "three", "four", "five"};System.out.println("Integer Array:");example.printArray(intArray);System.out.println("Double Array:");example.printArray(doubleArray);System.out.println("String Array:");example.printArray(stringArray);// 调用泛型方法,传入不同类型的参数String result1 = example.identity("Hello");Integer result2 = example.identity(123);System.out.println("Identity Result 1: " + result1);System.out.println("Identity Result 2: " + result2);// 使用类型参数的边界double squareResult = example.square(4);System.out.println("Square Result: " + squareResult);}
}

三、泛型类

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

和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

代码示例

public class Box<T> {private T t;public void add(T t) {this.t = t;}public T get() {return t;}public static void main(String[] args) {Box<Integer> integerBox = new Box<Integer>();Box<String> stringBox = new Box<String>();integerBox.add(new Integer(10));stringBox.add(new String("学生数据"));System.out.printf("整型值为 :%d\n\n", integerBox.get());System.out.printf("字符串为 :%s\n", stringBox.get());}

相关文章:

Java基础之泛型

Java基础之泛型 一、泛型应用范围二、使用泛型方法三、泛型类 一、泛型应用范围 泛型提供了编译时类型安全检测机制&#xff0c;该机制允许程序员在编译时检测到非法的类型。 使用 Java 泛型的概念&#xff0c;我们可以写一个泛型方法来对一个对象数组排序。然后&#xff0c;调…...

WPF实战项目十五(客户端):RestSharp的使用

1、在WPF项目中添加Nuget包&#xff0c;搜索RestSharp安装 2、新建Service文件夹&#xff0c;新建基础通用请求类BaseRequest.cs public class BaseRequest{public Method Method { get; set; }public string Route { get; set; }public string ContenType { get; set; } &quo…...

C语言基础篇5:指针(二)

接上篇&#xff1a;C语言基础篇5&#xff1a;指针(一) 4 指针作为函数参数 4.1 指针变量作为函数的参数 指针型变量可以作为函数的参数&#xff0c;使用指针作为函数的参数是将函数的参数声明为一个指针&#xff0c;前面提到当数组作为函数的实参时&#xff0c;值传递数组的地址…...

「Verilog学习笔记」非整数倍数据位宽转换8to12

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 要实现8bit数据至12bit数据的位宽转换&#xff0c;必须要用寄存器将先到达的数据进行缓存。8bit数据至12bit数据&#xff0c;相当于1.5个输入数据拼接成一个输出数据&#…...

Qt_一个由单例引发的崩溃

Qt_一个由单例引发的崩溃 文章目录 Qt_一个由单例引发的崩溃摘要关于 Q_GLOBAL_STATIC代码测试布局管理器源码分析Demo 验证关于布局管理器析构Qt 类声明周期探索更新代码获取父类分析Qt 单例宏源码 关键字&#xff1a; Qt、 Q_GLOBAL_STATIC、 单例、 UI、 崩溃 摘要 今…...

P8A004-系统加固-磁盘访问权限

【预备知识】 访问权限&#xff0c;根据在各种预定义的组中用户的身份标识及其成员身份来限制访问某些信息项或某些控制的机制。访问控制通常由系统管理员用来控制用户访问网络资源&#xff08;如服务器、目录和文件&#xff09;的访问&#xff0c;并且通常通过向用户和组授予…...

数智赋能 锦江汽车携手苏州金龙打造高质量盛会服务

作为一家老牌客运公司&#xff0c;成立于1956年的上海锦江汽车服务有限公司&#xff08;以下简称锦江汽车&#xff09;&#xff0c;拥有1200多辆大巴和5000多辆轿车&#xff0c;是上海乃至长三角地区规模最大的专业旅游客运公司。面对客运市场的持续萎缩&#xff0c;锦江汽车坚…...

kolla-ansible 部署OpenStack云计算平台

目录 一、环境 二、安装及部署 三、测试 一、环境 官方文档&#xff1a;https://docs.openstack.org/kolla-ansible/yoga/user/quickstart.html rhel8.6 网络设置&#xff1a; 修改网卡名称 网络IP&#xff1a; 主机名&#xff1a; 网络时间协议 配置软件仓库 vim docke…...

wireshark 抓包提示

[TCP Previous segment not captured] 在TCP的传输阶段&#xff0c;同一台主机发出的数据段应该是连续的&#xff0c;即后一个包的Seq等于前一个包的SeqLen&#xff08;三次握手和四次挥手是个例外&#xff09;。如果wireshark发现后一个包的Seq号大于前一个包的SeqLen&#xf…...

Redis未授权访问-CNVD-2019-21763复现

Redis未授权访问-CNVD-2019-21763复现 利用项目&#xff1a; https://github.com/vulhub/redis-rogue-getshell 解压后先进入到 RedisModulesSDK目录里面的exp目录下&#xff0c;make编译一下才会产生exp.so文件&#xff0c;后面再利用这个exp.so文件进行远程代码执行 需要p…...

汇编:常用的输入与输出

1.字符输出 使用int 21h中断的02h号功能可以在屏幕输出一个字符&#xff0c;dl中存放要输出字符的ascii码。 如下代码将在屏幕输出一个字符“a”&#xff1a; mov ah,02hmov dl,aint 21h 2.字符输入 使用int 21h中断的01h号功能可以接受一个字符&#xff0c;al存放输…...

MYSQL基础之【正则表达式,事务处理】

文章目录 前言MySQL 正则表达式MySQL 事务事务控制语句事务处理方法PHP中使用事务实例 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不…...

Mysql并发时常见的死锁及解决方法

使用数据库时&#xff0c;有时会出现死锁。对于实际应用来说&#xff0c;就是出现系统卡顿。 死锁是指两个或两个以上的事务在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象。就是所谓的锁资源请求产生了回路现象&#xff0c;即死循环&#xff0c;此时称系统处于…...

二十九、微服务案例完善(数据聚合、自动补全、数据同步)

目录 一、定义 二、分类 1、桶(Bucket)聚合: 2、度量(Metric&#xff09;聚合: 3、管道聚合&#xff08;Pipeline Aggregation&#xff09;&#xff1a; 4、注意&#xff1a; 参与聚合的字段类型必须是: 三、使用DSL实现聚合 聚合所必须的三要素&#xff1a; 聚合可配…...

vue 目录树的展开与关闭

目录 1、翻页方法中控制目录树节点的展开与关闭2、搜索目录树节点名称控制节点的展开与关闭 <el-tree:data"data_option"ref"tree":props"defaultProps"node-click"handleNodeClick":default-expanded-keys"needExpandedKeys&…...

【Docker】python flask 项目如何打包成 Docker images镜像 上传至阿里云ACR私有(共有)镜像仓库 集成Drone CI

一、Python环境编译 1、处理好venv环境 要生成正常的 requirements.txt 文件&#xff0c;我们就需要先将虚拟环境处理好 创建虚拟环境&#xff08;可选&#xff09;&#xff1a; 在项目目录中&#xff0c;你可以选择使用虚拟环境&#xff0c;这样你的项目依赖将被隔离在一个…...

力扣labuladong——一刷day55

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣951. 翻转等价二叉树二、力扣124. 二叉树中的最大路径和三、力扣112. 路径总和&#xff08;遍历&#xff09;四、力扣112. 路径总和&#xff08;分解&a…...

springboot实现验证码功能

转载自 : www.javaman.cn 1、编写工具类生成4位随机数 该工具类主要生成从0-9&#xff0c;a-z&#xff0c;A-Z范围内产生的4位随机数 /*** 产生4位随机字符串*/public static String getCheckCode() {String base "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn…...

内测分发平台是否支持应用的微服务化部署

内测分发平台的微服务化部署支持是现代应用开发和部署的一个重要特性。首先我们得知道什么是微服务化部署都有哪些关键功能&#xff0c;如何实施微服务化的部署。下文以我自己理解总结了几点。 图片来源:news.gulufenfa.com 微服务是一种基于独立运行的小型服务来构建应用程序…...

1140. 最短网络,prim算法,模板题

1140. 最短网络 - AcWing题库 农夫约翰被选为他们镇的镇长&#xff01; 他其中一个竞选承诺就是在镇上建立起互联网&#xff0c;并连接到所有的农场。 约翰已经给他的农场安排了一条高速的网络线路&#xff0c;他想把这条线路共享给其他农场。 约翰的农场的编号是1&#xf…...

# 发散创新:基于Rust的内存安全防御机制实战解析在现代软件开发中,**内存安全漏洞**(如缓冲区溢出

发散创新&#xff1a;基于Rust的内存安全防御机制实战解析 在现代软件开发中&#xff0c;内存安全漏洞&#xff08;如缓冲区溢出、空指针解引用、Use-After-Free等&#xff09;仍是导致系统崩溃甚至远程代码执行的核心风险点。传统语言如C/C因缺乏运行时保护机制而屡遭攻击&…...

Cursor Pro 完整破解指南:开源工具实现永久免费使用的7个关键步骤

Cursor Pro 完整破解指南&#xff1a;开源工具实现永久免费使用的7个关键步骤 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reach…...

基于改进YOLO11算法的芯片微缺陷检测系统(UI界面+数据集+分析界面+处置建议+训练代码)

摘要&#xff1a;芯片制造过程中的微小缺陷&#xff08;5-7像素&#xff09;检测是质量控制的关键环节&#xff0c;但现有目标检测算法在处理此类微小目标时存在特征信息丢失、检测精度低和漏检率高等问题。针对上述问题&#xff0c;本文提出了一种基于YOLO11的改进检测方法YOL…...

Cursor Free VIP终极教程:如何绕过试用限制享受终身Pro功能

Cursor Free VIP终极教程&#xff1a;如何绕过试用限制享受终身Pro功能 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...

elasticsearch-py完全指南:官方Python客户端的10个核心功能解析

elasticsearch-py完全指南&#xff1a;官方Python客户端的10个核心功能解析 【免费下载链接】elasticsearch-py Official Python client for Elasticsearch 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-py elasticsearch-py是Elasticsearch官方推出的Py…...

剧本工业级输出|像素剧本圣殿支持Final Draft格式导出预研进展

剧本工业级输出&#xff5c;像素剧本圣殿支持Final Draft格式导出预研进展 1. 像素剧本圣殿简介 Pixel Script Temple&#xff08;像素剧本圣殿&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。这款工具将先进的AI推理能力与独特的8-Bit复古美…...

收藏必备:小白程序员轻松掌握大模型全栈自动化(从零搭建智能工作流)

单个Skill只能做单点任务&#xff0c;怎么实现跨工具、跨流程的复杂自动化&#xff1f;MCP和Skill到底怎么配合&#xff1f;什么时候用MCP什么时候用Skill&#xff1f;怎么让AI自己决策什么时候调用什么Skill&#xff0c;完全不用人工干预&#xff1f;怎么把企业私有知识、历史…...

MogFace人脸检测模型-WebUI实操手册:Linux服务器部署、日志排查、性能调优

MogFace人脸检测模型-WebUI实操手册&#xff1a;Linux服务器部署、日志排查、性能调优 1. 服务简介与核心价值 MogFace人脸检测模型是基于ResNet101架构的高精度检测解决方案&#xff0c;在CVPR 2022会议上发表并获得了广泛认可。这个WebUI服务让用户能够通过直观的界面快速部…...

3步找回消失的微信记忆:WechatDecrypt工具实战指南

3步找回消失的微信记忆&#xff1a;WechatDecrypt工具实战指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾因手机更换而痛失珍贵的聊天记录&#xff1f;或是急需找回某段重要对话却束手无策&…...

AIAgent持续学习实战手册(SITS2026核心方法论首次公开)

第一章&#xff1a;AIAgent持续学习的范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 传统AI系统依赖静态数据集与离线训练&#xff0c;难以应对真实世界中动态演化的任务分布、概念漂移与多轮交互反馈。AIAgent持续学习正从“模型微调”走向“认知闭环”&#xff0c…...