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

Java中的泛型数据

一.定义和注意

在Java中,泛型是一种参数化类型的机制,允许在定义类、接口或方法时使用类型参数,使得代码可以在不同的具体类型上复用,提高代码的通用性和安全性。

注意:

类型参数通常使用单个大写字母表示,常见的有 T (Type)、 E (Element,常用于集合)、 K (Key,常用于键值对)、 V (Value,常用于键值对) 等。

- 泛型类型参数在编译时会被擦除,这意味着在运行时,泛型代码中的类型参数会被替换为其限定类型(如果没有限定则为 Object ),这也是Java泛型和C#泛型的一个重要区别。

二.泛型的使用

首先我们先来创建一个栈类型数据,但是这时候就有一个问题:我传输的数据和她能接受的数据必须是一种,如果我们想传多种数据该怎末办呢?

这时候就要用到泛型数据:首先需要自己定义一个类型数据如下图的”孙敬泽“为什么arr=new 孙敬泽会报错?,因为电脑数据类型里识别不了你自己新定义的一个孙敬泽数据,所以这里需要进行一个强制类型转换。将”孙敬泽“数据转为最大的Object类对象,因为Object是最大的类,包含所有类型的数据,若些别的类太小了包含不了所有)那么”孙敬泽“到底是一个什么类型的数据呢,接受的时候在Stack后加上他具体的数据类型就可以了,但是注意要放进栈里的必须是一类数据,泛型数据就是泛指一切数据类型

那么为什么直接用Object 不行呢?

用Object的却可以输入不同的数据类型,但是有些类型例如数组,它的定义是一堆相同数据类型的集合,这时候再用这个输入就会打破常规,所以不用Object。

三.使用形式

泛型类

泛型类是将类型参数化的类,使用尖括号 <> 来定义类型参数。语法格式如下:

class 类名<类型参数列表> {
// 类的成员变量、方法等
类型参数列表 成员变量; 
返回值类型 方法名(类型参数列表 参数) {
// 方法体
}
}

示例:定义一个简单的泛型类 Box ,用于存储任意类型的数据class Box<T> {private T data;public T getData() {return data;}public void setData(T data) {this.data = data;}
}
使用方式:public class Main {public static void main(String[] args) {// 创建一个存储Integer类型的Box对象Box<Integer> integerBox = new Box<>(); integerBox.setData(10);Integer num = integerBox.getData();// 创建一个存储String类型的Box对象Box<String> stringBox = new Box<>(); stringBox.setData("Hello");String str = stringBox.getData();}
}


 泛型方法

泛型方法是在方法中使用类型参数,它可以在普通类中定义,也可以在泛型类中定义。语法格式如下:

修饰符 <类型参数列表> 返回值类型 方法名(类型参数列表 参数) {
// 方法体
}

示例:在普通类中定义泛型方法class GenericMethodExample {// 泛型方法,用于交换两个指定类型的值public static <T> void swap(T[] arr, int i, int j) {T temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}
使用方式:public class Main {public static void main(String[] args) {Integer[] intArray = {1, 2};GenericMethodExample.swap(intArray, 0, 1);for (Integer num : intArray) {System.out.print(num + " ");}}
}

总结:

泛型是编程语言中一种参数化类型的机制,允许在定义类、接口或方法时使用未知的类型参数,在使用时再指定具体类型,从而实现代码的复用和类型安全。

核心作用

- 代码复用:无需为不同数据类型重复编写相似逻辑,比如一个泛型集合类可存储整数、字符串等各种类型数据。
- 类型安全:编译时检查数据类型,避免运行时出现类型转换错误。例如,指定为 List<String> 的集合,编译时就会阻止添加整数。


基本使用形式

- 类/接口泛型:定义时在名称后加 <类型参数> ,如 class Box<T> { T value; } ,使用时指定具体类型 Box<Integer> box = new Box<>(); 。
- 方法泛型:在方法返回值前声明类型参数,如 public <T> T getValue(T[] array) { ... } ,调用时可自动推断类型。

简单来说,泛型就像给代码装了一个“通用接口”,既能灵活适配不同数据类型,又能保证类型正确,是提高代码通用性和安全性的重要工具。

http://www.dtcms.com/a/293144.html

相关文章:

  • K8S基础环境部署
  • 赋能未来数学课堂——基于Qwen3、LangChain与Agent架构的个性化教辅系统研究
  • Rocky Linux 9 快速安装 Node.js
  • 遇到JAVA问题
  • SQL 基础案例解析
  • Spring Boot 使用Jasypt加密
  • 我们能否承担微服务带来的复杂性和运维成本?
  • wps dispimg python 解析实现参考
  • ROS个人笔记
  • 【音视频协议篇】RTMP协议
  • A316-HF-I2S-V1:USB TO I2S HiFi音频转换器评估板技术解析
  • Flutter基础(前端教程①⑨-margin-padding)
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • List和Map的区别
  • Java值传递和构造函数
  • Java HttpClient使用手册
  • 【C语言进阶】动态内存管理(1)
  • Model Control Protocol 使用MCP进行各种任务适配,调用工具和资源进行客户端开发
  • OneCode3.0 UI组件注解详解手册
  • 前端之jQuery
  • Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
  • PCIe Base Specification解析(二)
  • Linux笔记2——常用命令-1
  • Sa-Token大师:第四章 - 企业级架构与源码实战
  • 首次启动 - OpenExo
  • 开发板系统烧写
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的实习管理系统(附源码+数据库+毕业论文+项目部署视频教程+项目所需软件工具)
  • 面试知识梳理-vue3和vue2区别
  • Spring快速整合Mybatis
  • PyTorch武侠演义 第一卷:初入江湖 第4章:损失玉佩的评分风波