Java基础- 泛型

泛型是 Java 编程语言的一个特性,它允许在编写和使用类、接口和方法时添加类型参数。泛型的主要目的是提高代码的可重用性、类型安全性和可读性。

泛型方法允许在方法级别上指定类型参数,提供了极大的灵活性和类型安全性。以下是一个泛型方法的示例,该方法可以交换数组中的两个元素的位置:

public class GenericMethods {// 泛型方法:交换数组中的两个元素public static <T> void swap(T[] array, int firstIndex, int secondIndex) {T temp = array[firstIndex];array[firstIndex] = array[secondIndex];array[secondIndex] = temp;}public static void main(String[] args) {// Integer 数组Integer[] intArray = {1, 2, 3, 4};System.out.println("原始 Integer 数组: " + Arrays.toString(intArray));swap(intArray, 0, 2);System.out.println("交换后的 Integer 数组: " + Arrays.toString(intArray));// String 数组String[] stringArray = {"Hello", "World", "Java", "Generics"};System.out.println("\n原始 String 数组: " + Arrays.toString(stringArray));swap(stringArray, 1, 3);System.out.println("交换后的 String 数组: " + Arrays.toString(stringArray));}
}

在上述例子中:

  • swap 方法是一个泛型方法,其类型参数是 <T>。这意味着这个方法可以接受任何类型的数组。
  • 方法的签名 public static <T> void swap(T[] array, int firstIndex, int secondIndex) 显示了泛型类型 <T>,表示数组中的元素类型。
  • main 方法中,我们分别对一个 Integer 数组和一个 String 数组使用了 swap 方法,展示了其在不同类型上的通用性。

泛型方法的优点在于,我们可以编写一个方法,它可以在不同类型的数据上工作,而不需要针对每种数据类型编写重复的代码。这增加了代码的重用性和灵活性,同时提高了类型安全性。

在泛型方法 public static <T> void swap(T[] array, int firstIndex, int secondIndex) 中,第一个 <T> 是用来声明类型参数 T 的。这个声明告诉编译器,T 是一个类型参数,它将在整个方法中代表某个类型。这个类型将在方法调用时确定,基于传递给方法的参数。

  1. 类型参数的声明

    • <T> 是泛型方法的一部分,它在方法的返回类型之前出现,用于声明一个或多个类型参数。
    • 这里,T 是一个类型占位符,代表一个未知的类型。
  2. 方法签名中的使用

    • 在方法的参数列表中使用了 T(例如 T[] array),这意味着这个方法可以接受任何类型的数组。
  3. 类型参数的作用

    • 这种声明方式使得 swap 方法可以接受任何类型的数组,例如 Integer[]String[] 或任何其他对象类型数组。
    • 在方法被调用时,例如 swap(intArray, 0, 2),编译器会根据传入的数组类型(在这个例子中是 Integer[])来推断 T 的具体类型。
  4. 泛型的优点

    • 这种泛型方法的写法提高了代码的重用性和灵活性。相同的方法可以用于不同类型的数据,而无需针对每种数据类型重写方法。
  5. 区别于类级别的泛型

    • 在泛型类中,类型参数通常在类名之后声明(如 class MyClass<T>)。但在泛型方法中,类型参数在方法返回类型之前声明,即使该方法是在泛型类中定义的。

总之,方法中的 <T> 是泛型方法的关键部分,它使得方法能够灵活地处理不同类型的数据,同时保持类型安全和清晰的代码结构。


如果一个泛型方法包含多个泛型类型参数,这些类型参数会在方法的声明中一起被指定。这允许方法在不同类型的参数上操作,而这些类型彼此之间可以是完全独立的。下面是一个包含多个泛型类型参数的方法的例子:

public class GenericMethodExample {// 一个包含两个泛型类型参数的方法public static <T, U> void printArray(T[] arrayT, U[] arrayU) {for (T element : arrayT) {System.out.print(element + " ");}System.out.println();for (U element : arrayU) {System.out.print(element + " ");}System.out.println();}public static void main(String[] args) {Integer[] intArray = {1, 2, 3, 4};String[] stringArray = {"Hello", "World"};// 调用具有两个不同泛型类型的方法printArray(intArray, stringArray);}
}

在这个例子中:

  1. printArray 方法有两个泛型类型参数:<T, U>

    • 这意味着这个方法可以接受两种不同类型的数组。
    • T[] arrayTU[] arrayU 分别是这两种类型的数组。
  2. main 方法中,我们传递了一个 Integer 类型的数组和一个 String 类型的数组给 printArray 方法。

    • T 在这个调用中被推断为 Integer
    • U 被推断为 String

这个方法展示了如何使用多个泛型类型参数来提供更大的灵活性。通过这种方式,可以编写能够处理多种不同类型数据的通用代码,从而增强代码的重用性和可维护性。

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

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

相关文章

Windows.OpenSSL生成ssl证书配置到nginx

一、下载OpenSSL程序安装 到E:\soft\OpenSSL-Win64 二、打开一个CMD控制台窗口&#xff0c;设置好openssl.cnf路径 E: cd E:\soft\OpenSSL-Win64\bin set OPENSSL_CONFE:\soft\OpenSSL-Win64\bin\openssl.cnf 三、在当前目录 E:\soft\OpenSSL-Win64\bin 里创建两个子目录 m…

力扣103. 二叉树的锯齿形层序遍历

广度优先搜索 思路&#xff1a; 需要逐层遍历结果&#xff0c;通过广度优先搜索即可&#xff1b; 使用 queue&#xff0c;初始将 root push 进入 queue&#xff1b;逐层搜索&#xff0c;直到 queue 为空&#xff1b; queue 里为当前层节点元素&#xff0c;一次循环处理&#x…

酿酒生产废水处理设备如何选型

选型酿酒生产废水处理设备是确保废水处理过程高效稳定的关键步骤。酿酒生产过程中&#xff0c;产生的废水中含有大量有机物和悬浮物&#xff0c;因此需要选择适合的设备来进行处理。 首先&#xff0c;要根据酿酒生产废水的特点进行选型。酿酒废水的主要特点是&#xff1a;水量较…

uni-app使用uni-ui加ts类型限制

uni-app使用uni-ui加ts类型限制 安装 uni-ui 组件库 pnpm i dcloudio/uni-ui配置自动导入组件 // pages.json {// 组件自动导入"easycom": {"autoscan": true,"custom": {// uni-ui 规则如下配置 "^uni-(.*)": "dcloudio/uni…

phpstorm配置ftp

1 选择设置ftp 2设置自动上传

分享两个概念:非受检异常和受检异常

分享两个概念&#xff1a;非受检异常和受检异常 愿你的每一天都充满阳光和笑声&#xff0c;愿每一步都是轻松与愉快。在新的旅程中&#xff0c;愿你找到勇气攀登高峰&#xff0c;找到智慧化解困境。 愿你的心中充满温暖和善意&#xff0c;愿你的梦想如彩虹般美丽且真实。愿你发…

阿里云ECS服务器安装了数据库,nginx 等,已经启动,但是浏览器,navicat 访问不了

目录 1 问题2 实现 1 问题 阿里云ECS服务器安装了数据库&#xff0c;nginx 等&#xff0c;已经启动&#xff0c;但是浏览器&#xff0c;navicat 访问不了&#xff1b; 防火墙也关闭了&#xff0c;使用命令已经进入数据库了&#xff0c;说明数据库已经安装成功了&#xff0c;但…

Android开发基础(一)

Android开发基础&#xff08;一&#xff09; 本篇主要是从Android系统架构理解Android开发。 Android系统架构 Android系统的架构采用了分层的架构&#xff0c;共分为五层&#xff0c;从高到低分别是Android应用层&#xff08;System Apps&#xff09;、Android应用框架层&a…

Python实现PDF—>Excel的自动批量转换(附完整代码)

Python实现PDF—>Excel的自动批量转换&#xff08;附完整代码&#xff09; 话不多说&#xff0c;先看效果&#xff01; 需要转换的PDF&#xff1a; 转换后的Excel&#xff1a; 01、底层原理 PDF 到 Excel 的转换涉及不同文件格式之间的数据提取和重构。底层原理可以简…

Flask 菜品管理

common/libs/Helper.py getDictFilterField() 方法 用于在web/templates/food/index.html中展示菜品分类 如何能够通过food里面的cat_id获取分类信息呢&#xff1f;只能通过for循环&#xff0c;这样会很麻烦&#xff0c;所以定义了这个方法。 这个方法可以的查询返回结果…

linux 01 centos镜像下载,服务器,vmware模拟服务器

https://www.bilibili.com/video/BV1pz4y1D73n?p3&vd_source4ba64cb9b5f8c56f1545096dfddf8822 01.使用的版本 国内主要使用的版本是centos 02.centos镜像下载 这里的是centos7 一.阿里云官网地址&#xff1a;https://www.aliyun.com/ 二. -----【文档与社区】 —【…

CSND修改付费专栏价格

人工客服在个人中心右下角可以找到 客服回复已订阅专栏不支持修改价格

师傅带练|在线实习项目,提供实习证明

八大项目&#xff1a;某实习网站招聘信息采集与分析&#xff08;Python数据采集与分析&#xff09; 股票价格形态聚类与收益分析&#xff08;Python金融分析&#xff09; 某平台网络入侵用户自动识别&#xff08;Python机器学习&#xff09; 某平台广东省区采购数据分析&…

Vue项目nginx部署到线上,访问时加前缀解决方案

一、业务场景&#xff1a; 最近项目开发完了&#xff0c;需要部署一个测试版本和正式版本到线上&#xff0c;测试版本前面需要加一个dev前缀&#xff0c;遇到了一些坑&#xff0c;分享给大家 二、目前效果 三、具体实现步骤&#xff1a; &#xff08;1&#xff09;实现静态文…

【SEO优化】之html语义化标签

ChatGPT4.0国内站点&#xff1a;海鲸AI HTML语义化标签是指那些具有明确含义或者能够清晰描述其代表内容或功能的标签。使用语义化标签不仅能够使网页的结构更加清晰&#xff0c;而且有助于搜索引擎优化&#xff08;SEO&#xff09;&#xff0c;并且提升网站的可访问性&#xf…

构建安全可靠的系统:第二十一章到附录 A

第二十一章&#xff1a;建立安全和可靠性文化 原文&#xff1a;21. Building a Culture of Security and Reliability 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Heather Adkins 与 Peter Valchev&#xff0c;Felix Grbert&#xff0c;Ana Oprea…

【数据库】简单聊聊数据库可以做什么,有什么用?

随着云计算和大数据的兴起&#xff0c;数据库的作用日益突出&#xff0c;因此了解什么是数据库&#xff0c;数据库可以做什么&#xff0c;有什么用是非常必要的。今天我们就来简单聊聊。 数据库是什么&#xff1f; 数据库是一个组织化的数据集合&#xff0c;用于存储大量的结…

艾思控AQMD6008BLS-TE无刷电机驱动使用笔记(配合STM32)

一、介绍 本驱动器使用的电机电流精确检测技术、有感无刷电机自测速、有感无刷电机转动位置检测、再生电流恒电流制动&#xff08;或称刹车&#xff09;技术和强大的PID调节技术可地控制电机平稳正反转、换向及制动&#xff0c;输出电流实时调控防止过流&#xff0c;精准控制电…

GC2804——GC2803 的升级,12V H桥驱动,8 个NPN达林顿晶体管,采用SSOP24 封装,应用于安防步进电机驱动产品上

GC2804 是 GC2803 的升级&#xff0c;在内部集成了 8 个 NPN 达林顿晶体管连接阵列的基础上&#xff0c;又集成了一路 12V 的 H 桥驱动。8 个 NPN 达林顿阵列用来驱动高压的步进电机&#xff0c;H 桥驱动可以用来驱动 IR-CUT&#xff0c;此芯片专用于安防摄像头系统方案。该 GC…

十分钟部署清华 ChatGLM-6B,实测效果超预期(Linux版)

前段时间&#xff0c;清华公布了中英双语对话模型 ChatGLM-6B&#xff0c;具有60亿的参数&#xff0c;初具问答和对话功能。 最&#xff01;最&#xff01;最重要的是它能够支持私有化部署&#xff0c;大部分实验室的服务器基本上都能跑起来。因为条件特殊&#xff0c;实验室网…