Java基础——自学习使用(泛型)

一、泛型的定义

        泛型的本质是参数化类型,也就是所操作的数据类型被指定为一个参数。

        泛型泛指一切类型,能够代表一切类型,是一种在编程中广泛使用的概念,特别是在面向对象编程中。它允许在编写代码时使用类型参数,这些参数在代码被实际使用时才会被具体的类型所替换。简单来说,泛型就是将类型参数化,使得一个类或方法能够操作多种数据类型,而不仅仅是预先定义好的一种或几种类型。

二、如何使用泛型

        通过实现一个栈了解什么是泛型和调用泛型的原因。

        

        创建一个int数组,定义一个游标i,定义数组大小,编写添加数据和输出数据的方法。但此时只能存储int类型数据,如果向存储其他类型数据,可以重现创建一个类修改数据类型,但太过繁琐,所以引入泛型,泛指一切类型,能够代表一切类型,将其他数据类型进行转换。这就是使用泛型的好处。

 二、如何使用泛型

1.泛型类

        泛型类就是在类定义时通过类型参数指定类中某些属性的类型。

         ①在类后边加< 具体类型名>

          ②在变量名前加 泛型类型名

class 类名称 <泛型标识、泛型标识,...> {private 泛型标识 变量名;......
}
// 定义一个泛型类Box  
public class Box<T> {  // T stands for "Type" - 在这里T是一个占位符,用于表示实际的类型  // T类型的变量  private T t;  // 添加一个构造方法,接收T类型的参数  public Box(T t) {  this.t = t;  }  // 获取t的值  public T get() {  return t;  }  // 设置t的值  public void set(T t) {  this.t = t;  }  // 示例方法,用于展示泛型类型的信息  public void printTypeInfo() {  System.out.println("The type of t is: " + t.getClass().getName());  }  // 主方法,用于测试Box类  public static void main(String[] args) {  // 创建一个存储整数的Box  Box<Integer> integerBox = new Box<>(123);  System.out.println(integerBox.get());  integerBox.printTypeInfo();  // 创建一个存储字符串的Box  Box<String> stringBox = new Box<>("Hello, World!");  System.out.println(stringBox.get());  stringBox.printTypeInfo();  }  
}

2.泛型方法

        泛型方法是在调用方法时指定类型参数的方法。

        ①类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();

         java 1.7以后,后边的<>中具体的数据类型可以省略不写

        ②类名<具体的数据类型> 对象名 = new 类名<>();

// 定义一个泛型类Box  
public class Box<T> {  // T stands for "Type" - 在这里T是一个占位符,用于表示实际的类型  // T类型的变量  private T t;  // 添加一个构造方法,接收T类型的参数  public Box(T t) {  this.t = t;  }  // 获取t的值  public T get() {  return t;  }  // 设置t的值  public void set(T t) {  this.t = t;  }  // 示例方法,用于展示泛型类型的信息  public void printTypeInfo() {  System.out.println("The type of t is: " + t.getClass().getName());  }  // 主方法,用于测试Box类  public static void main(String[] args) {  // 创建一个存储整数的Box  Box<Integer> integerBox = new Box<>(123);  System.out.println(integerBox.get());  integerBox.printTypeInfo();  // 创建一个存储字符串的Box  Box<String> stringBox = new Box<>("Hello, World!");  System.out.println(stringBox.get());  stringBox.printTypeInfo();  }  
}

3.泛型接口

        与泛型类类似,泛型接口也是在接口定义时指定类型参数的接口。

public interface Pair<K, V> {  public K getKey();  public V getValue();  
}  // 实现  
class OrderedPair<K, V> implements Pair<K, V> {  private K key;  private V value;  public OrderedPair(K key, V value) {  this.key = key;  this.value = value;  }  @Override  public K getKey() { return key; }  @Override  public V getValue() { return value; }  
}

4.泛型通配符

泛型通配符(Wildcard Types)主要用于不确定或不关心实际类型参数的情况。主要有两种形式:? 和 ? extends Type? super Type

  • ?:表示未知的类型。
  • ? extends Type:表示未知的类型,但它是Type或Type的子类型。
  • ? super Type:表示未知的类型,但它是Type的超类型(父类型或自身)。

5.泛型擦除

        Java的泛型是通过类型擦除来实现的,这意味着泛型信息在编译时会被擦除,并在运行时被替换为类型参数的上界(通常是Object)。因此,泛型在运行时是不包含类型信息的,这也是为什么你不能在运行时检查一个泛型对象的实际类型参数的原因。然而,这并不意味着泛型没有类型安全,因为类型检查是在编译时进行的。

6.泛型的好处

  1. 类型安全:泛型允许在编译时检查类型错误,从而避免了运行时错误。
  2. 消除类型转换:使用泛型后,很多时候可以自动处理类型转换,减少了代码中的显式类型转换。
  3. 提高代码复用性:通过泛型,可以编写更加通用的代码,这些代码可以适用于多种数据类型。
  4. 提高代码清晰度:泛型使得代码更加清晰易懂,因为它明确了数据类型。

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

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

相关文章

MES管理系统助力印刷企业实现智能化工艺流程

在印刷这一古老而充满活力的行业中&#xff0c;科技的浪潮正以前所未有的速度重塑着每一个生产环节。随着制造业数字化转型的深入&#xff0c;引入MES管理系统&#xff0c;为印刷企业带来了从原材料入库到成品出库的全流程智能化变革&#xff0c;不仅提升了生产效率&#xff0c…

剪辑小白必看:好用的剪辑工具推荐!

作为一位热爱创作的视频制作者&#xff0c;我尝试过不少剪辑软件&#xff0c;今天我想分享自己对福昕视频剪辑、爱拍剪辑、达芬奇和VSDC Video Editor这四款软件的使用体验。 福昕视频剪辑 链接&#xff1a;www.pdf365.cn/foxit-clip/ 我第一次接触到福昕视频剪辑是在朋友的…

树数据结构(Tree Data Structures)的全面指南:深度解析、算法实战与应用案例

树数据结构&#xff08;Tree Data Structures&#xff09;的全面指南&#xff1a;深度解析、算法实战与应用案例 引言 树数据结构&#xff08;Tree Data Structures&#xff09;作为计算机科学中的基石之一&#xff0c;以其独特的层次结构和分支特性&#xff0c;在众多领域发…

2012-2022年各省新质生产力匹配数字经济数据

2012-2022年各省新质生产力匹配数字经济数据 1、时间&#xff1a;2012-2022年 2、来源&#xff1a;各省年鉴、能源年鉴、工业年鉴、统计年鉴 3、指标&#xff1a;prov、year、gdp亿元、在岗职工工资元、第三产业就业比重、人均受教育平均年限、教育经费强度、在校学生结构、…

【STM32】IWDG独立看门狗与WWDG窗口看门狗

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 WDG简介 IWDG IWDG特性 独立看门狗时钟 键寄存器 超时时间 IWDG代码 WWDG WWDG特性 窗口看门狗时钟 超时时间 WWDG时序 WWDG代码 IWDG和WWDG对比 WDG简介 WDG&#xff08;…

面经:什么是Transformer位置编码?

过去的几年里&#xff0c;Transformer大放异彩&#xff0c;在各个领域疯狂上分。它究竟是做什么&#xff0c;面试常考的Transformer位置编码暗藏什么玄机&#xff1f;本文一次性讲解清楚。 Transformer的结构如下&#xff1a; 可能是NLP界出镜率最高的图 Transformer结构中&a…

最大公约数(欧几里得算法)

欧几里得算法 只需要记住一个公式&#xff08;不需要推导&#xff0c;这就是数论的基础知识&#xff09;&#xff1a; step1&#xff1a; 判断小括号内右边的数字 b 是否为0&#xff0c;如果为0&#xff0c;输出小括号左边的数字 a &#xff0c;就是一开始要求的两个数的最大…

深度学习入门笔记

深度学习入门笔记 感知机逻辑与门与非门或门多层感知机异或门 神经网络激活函数输出层设计损失函数均方误差 MSE交叉熵误差 反向传播算法计算图局部计算计算图反向传播反向传播 参数更新训练过程总结 该篇文章为本人学习笔记的一部分。笔记基于《深度学习入门 基于python理论实…

在Linux下搭建go环境

下载go go官网&#xff1a;All releases - The Go Programming Language 我们可以吧压缩包下载到Windows上再传到Linux上&#xff0c;也可以直接web下载&#xff1a; wget https://golang.google.cn/dl/go1.23.0.linux-amd64.tar.gz 解压 使用命令解压&#xff1a; tar -x…

关于前端布局的基础知识

float 横向布局 float 实现横向布局&#xff0c;需要向横着布局的元素添加float 其值left right 存在问题 如果使用float 所在父级五高度&#xff0c;会导致下方的元素上移 top的高度被吞了 解决方法&#xff1a; 给父级元素设置高度&#xff1a;不推荐&#xff0c;需要给父级…

专题◉万字长文!盘点过去一年最出圈的Prompt项目教程,有3份在悄悄更新

1. OpenAI 官方出品 | 提示工程最权威的教程 (最新版) 2023年6月&#xff0c;OpenAI 发布了一篇〖*GPT Best Practice (GPT 最佳实践)* 〗教程&#xff0c;详细介绍 ChatGPT Prompt 交互策略&技巧&#xff0c;并且给出了示例说明。 一年时间过去了&#xff0c;OpenAI 不…

Axure RP实战:打造高效文字点选验证码

Axure RP实战&#xff1a;打造高效文字点选验证码 前言 在数字时代&#xff0c;网络安全和用户体验是设计在线表单时的两大关键考量。 验证码作为一种验证用户身份的技术&#xff0c;已经从简单的数字和字母组合&#xff0c;发展到了更为复杂和用户友好的形式。 今天&#…

数量关系:成本售价利润问题

问&#xff1a;某品牌服装&#xff0c;甲店进货价比乙店便宜10%&#xff0c;两店同时按20%的利润定价&#xff0c;这样1件商品乙店比甲店多赚4元&#xff0c;乙店的定价是多少元?() A 200 B 216 C 240【正确答案】 D 300标准答案&#xff1a;设乙店的进货价为x,则甲店的为0.9x…

灵办AI:解锁办公新境界,让工作更智能、更高效!

在这个信息爆炸的时代&#xff0c;我们每个人都在寻找能够提升效率、简化工作流程的工具。如果您正在寻找一个能够全方位提升工作效率的AI助手&#xff0c;那么灵办AI绝对值得您的关注。 为什么选择灵办AI&#xff1f; 在众多AI工具中&#xff0c;灵办AI凭借其卓越的性能和独…

Python数据采集与网络爬虫技术实训室解决方案

在大数据与人工智能时代&#xff0c;数据采集与分析已成为企业决策、市场洞察、产品创新等领域不可或缺的一环。而Python&#xff0c;作为一门高效、易学的编程语言&#xff0c;凭借其强大的库支持和广泛的应用场景&#xff0c;在数据采集与网络爬虫领域展现出了非凡的潜力。唯…

【微信小程序】导入项目

1.在微信开发工具中&#xff0c;点击【导入项目】 2.在打开的界面中执行2个步骤 1.找到要导入项目的路径2.AppID要改成自己的AppID 3.package.json包初始化【装包之前要确保有package.json文件】 1.在【资源管理器】空白处&#xff0c;点击鼠标右键&#xff0c;选择【】&am…

显示中文字体问题解决:ImportError: The _imagingft C module is not installed

使用opencv写入中文时&#xff0c;用以下代码会导致乱码&#xff1a; cv2.putText(im0, f"{label}:{score}", (xmin, ymin), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,255,0), 3)因此需要借助PIL库写入中文字符&#xff0c;用法如下&#xff1a; import cv2 from PIL impo…

一个简单的springboot项目(有源码)

开发一个springboot项目 代码迭代整合工具 gitee建模意义程序处理方式开发功能的步骤web服务网络状态码 web应用的开发分层springboot的作用 springboot框架搭建框架中各组件作用框架的演变如何提取hive中的表结构创建springboot 工程的引导模版 要选择aliyun &#xff0c;否则…

回顾MVC

Tomcat是servlet的容器,想用HttpServlet需要导入tomcat jar包 下图是没用springmvc时的场景&#xff0c;首先在web.xml里面配置访问路径为/Hello然后 通过get请求去调用login方法最后重定向到index.jsp中 index.jsp里面的内容 重定向到index.jsp中 在控制台获取到username里面的…

uniapp video标签无法播放视频

当video标签路径含有中文以及特殊字符视频就会无法播放 解决方法使用encodeURIComponent对路径进行加密处理 videoSrc data.coursewareFile? ${appConfig.apiUrl encodeURIComponent(data.coursewareFile)}: "";最后效果