Java泛型的定义与运用

泛型

泛型的作用从使用层面上来说是统一数据类型,防止将来的数据转换异常。从定义层面上来说,定义带泛型的类,方法等,将来使用的时候给泛型确定什么类型,泛型就会变成什么类型,凡是涉及到泛型的都会变成确定的类型,代码更灵活。
不使用泛型,少了限制,则在集合添加数据就不会类型异常的错误,导致运行结果出错。

public class Test {public static void main(String[] args) {ArrayList list = new ArrayList();list.add("1");list.add(666);list.add(true);for (Object o : list) {String s = (String) o;System.out.println(s.length());}}
}

在这里插入图片描述

  1. 泛型中的类型必须是引用类型
  2. 如果泛型不写,默认类型为Object

泛型的定义

含有泛型的类

new对象的时候确定类型,格式:

public class 类名<E>{ }
public class MyArrayList <E>{Object[] obj = new Object[5];//定义一个数组,充当ArrayList底层的数组,长度直接规定为10int size;public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致obj[size] = e;size++;return true;}@Overridepublic String toString() {return Arrays.toString(obj);}
}
public class Test {public static void main(String[] args) {Student<String> list1 = new Student<>();list1.add("张三");list1.add("李四");System.out.println(list1);//直接输出对象名,默认调用toStringStudent<Integer> list2 = new Student<>();list2.add(1);list2.add(2);System.out.println(list2);}
}

在这里插入图片描述

含有泛型的方法

调用的时候确定类型,其格式:

修饰符 <E> 返回值类型 方法名(E e)
public class Student {public static <E> void addAll(ArrayList<E> list, E...e){ //定义一个静态方法addAll,添加多个集合的元素,传入可变参数for (E element : e) {list.add(element);}}
}
public class Test {public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();Student.addAll(list1, "张三", "李四");System.out.println(list1);ArrayList<Integer> list2 = new ArrayList<>();Student.addAll(list2, 1, 2);System.out.println(list2);}
}

在这里插入图片描述

含有泛型的接口

格式:

public interface 接口名<E>{  }

什么时候确定类型分两种,一种是在实现类的时候还没有确定类型,只能在new实现类的时候确定类型了,例如ArrayList。一种是在实现类的时候直接确定类型了比如Scanner。

public interface MyList <E>{public boolean add(E e);
}
public class MyArrayList<E> implements MyList<E>{Object[] obj = new Object[5];int size;public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致obj[size] = e;size++;return true;}@Overridepublic String toString() {return Arrays.toString(obj);}
}
public class Test {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("张三");list.add("李四");System.out.println(list);}
}

在这里插入图片描述

泛型通配符

泛型通配符使得我们能够更加灵活地处理泛型类型,使代码更通用且可复用。包括以下几类
E:Element (在集合中使用,因为集合中存放的是元素)
T:Type(Java 类)
K:Key(键)
V:Value(值)
N:Number(数值类型)
?:表示不确定的 java 类型

public class Test {public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();list1.add("张三");list1.add("李四");ArrayList<Integer> list2 = new ArrayList<>();list2.add(1);list2.add(2);test(list1);test(list2);}public static void test(ArrayList<?> list){ //?表示不确定的 java 类型for (Object o : list) {System.out.println(o);}}
}

泛型的上限下限

泛型的上下限可以规定泛型的范围
上限:?只能接收extends后面的本类类型以及子类类型
格式:<? extends 类型>
下限:?只能接收super后面的本类类型以及父类类型
格式:<? super 类型>
Integer的父类Number
Number的父类Object
在这里插入图片描述

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

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

相关文章

Tomcat异步请求实现原理和应用场景简介

Tomcat支持异步请求&#xff0c;这是从Servlet 3.0规范开始引入的特性。以下将详细介绍Tomcat支持异步请求的实现原理以及Java应用场景。 Tomcat支持异步请求的实现原理 Tomcat支持异步请求的实现主要依赖于Servlet 3.0规范中引入的异步处理机制。具体来说&#xff0c;实现原…

Tomcat的安全配置

1、生产环境优化 2、部分漏洞修复 转载自风险评估&#xff1a;Tomcat的安全配置&#xff0c;Tomcat安全基线检查加固-CSDN博客

tomcat安装

tomcat tomcat和php一样&#xff0c;都是用来处理动态页面的。 tomcat也可以作为web应用服务器&#xff0c;开源的。 php .php tomcat .jsp nginx .html tomcat是用java代码写的程序&#xff0c;运行的是java的web应用程序 tomcat的特点和功能&#xff1a; 1、servlet容…

基于springboot+vue+uniapp的机电公司管理信息系统

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

使用Vue3、Pinia和Vite5打造高度还原的抖音仿制项目

douyin-vue 是一个模仿 抖音|TikTok 的移动端短视频项目。Vue 在移动端的"最佳实践"&#xff0c;媲美原生 App 丝滑流畅的使用体验。使用了最新的 Vue 技术栈&#xff0c;基于 Vue3、Vite5 、Pinia实现。数据保存在项目本地&#xff0c;通过 axios-mock-adapter 库拦…

代码随想录第四十八天 | 198.打家劫舍, 213.打家劫舍II,337.打家劫舍III

198.打家劫舍 看完想法&#xff1a;这里的偷/不偷&#xff0c;和背包问题中的放/不放感觉是一个道理&#xff0c;所以在dp递推公式中仍旧使用max(dp[i-2] nums[i], dp[i-1]) int rob(vector<int>& nums) {vector<int> dp(nums.size()1,0);if(nums.size()0) …

参数手册 : PXIe-1095

PXIe-1095 起售价 RMB 97,950.00 产品详细信息 PXI机箱类型: PXIe 机箱电源类型: 交流 混合插槽数量: 5 PXI Express插槽数量: 11 冗余硬件选项: 是 最大系统带宽: 24 GB/s 插槽数量: 18 PXI插槽数量: 0 系统定时插槽: 是 槽冷却能力: 82 瓦 简介 PXIe&#xff0c;18槽&am…

HTML5表单的自动验证、取消验证、自定义错误信息

1、自动验证 通过在元素中使用属性的方法&#xff0c;该属性可以实现在表单提交时执行自动验证的功能。下面是关于对元素内输入内容进行限制的属性的指定。 属性说明required输入内容是否不为空pattern输入的内容是否符合指定格式min、max输入的数值是否在min~max范围step判断…

一文清晰了解CSS

一、基本概念 1.定义 CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;&#xff0c;前面说了CSS是一种用于描述网页内容外观和样式的标记语言。 具体地&#xff0c;它通过选择器将样式规则应用到HTML元素上&#xff0c;控制网页的布局、颜色、字体等…

揭秘“消费即赚”的循环购模式

大家好&#xff0c;我是吴军&#xff0c;今天我将带您深入探索一种颠覆传统的新型商业模式——循环购模式。在这个模式中&#xff0c;消费者不仅能享受到购物的乐趣&#xff0c;还能通过消费获得实实在在的回报&#xff0c;甚至实现“边消费边赚钱”的奇妙体验。您是否好奇&…

JS常用正则校验大全

1、手机号(mobile phone)中国(严谨), 根据工信部2019年最新公布的手机号段 const reg /^(?&#x1f626;?:|00)86)?1(?&#x1f626;?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/; const str “19119255642”; consol…

通过函数来实现复数相加

在之前的的文章中介绍过函数重载&#xff0c;已经接触到重载&#xff08;overloading&#xff09;这个名词。所谓重载&#xff0c;就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义&#xff0c;使之实现新的功能。因此&#xff0c;同一个函数名就可以用来代表不…

vscode复制文件:行号

File Line Reference 插件可以复制文件名加行号&#xff0c;还可以将选中函数名进行复制&#xff0c;比较方便 w alt y (Windows) , ctrl y (macOS)复制行号加文件名 alt u (Windows) or ctrl u (macOS)复制带有选定行号文件名&#xff0c;函数名需要选中才行 查找文件&…

若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)

参考文章&#xff0c;非常感谢大佬的分享 实现可高亮的输入框 — HighlightTextarea GitHub:highlight-textarea 可看作者上一篇文章 若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word&#xff08;一&#xff09; 效果图 审核时&#xff0c;输入框高亮敏感词&#xff…

变阻器的分类

变阻器作为用于调节电路中电阻值的电子元件&#xff0c;在电子电路中具有广泛的应用。根据不同的工作原理和结构形式&#xff0c;变阻器可以分为多种类型。以下是对变阻器分类的详细阐述&#xff1a; 一、按工作原理分类 电位器是一种通过滑动端位置调节电阻值的变阻器&#x…

C++中 Debug和Release的区别

在C/C编程领域&#xff0c;Debug和Release是两种截然不同的编译模式&#xff0c;它们分别服务于不同的开发阶段和目标。理解这两种模式的区别不仅对于提高开发效率至关重要&#xff0c;还直接影响到最终产品的性能和质量。本文将深入探讨C/C中Debug和Release模式的区别&#xf…

Noah-MP陆面生态水文模拟与多源遥感数据同化

陆面模型在生态水文研究中的地位和作用&#xff1b;熟悉模型的发展历程&#xff0c;常见模型及各自特点&#xff1b;理解Noah-MP模型的原理&#xff0c;掌握Noah-MP模型在单站和区域的模拟、模拟结果的输出和后续分析及可视化等方法&#xff1b;课程还将深入讲解数据同化的原理…

6-添加自定义命令和生成的文件

本文使用的示例代码见1-简单开始cmake实践-CSDN博客。 假设&#xff0c;出于本教程的目的&#xff0c;我们决定不使用平台log和exp函数&#xff0c;而是希望生成一个预先计算值的表&#xff0c;以便在mysqrt函数中使用。在本节中&#xff0c;我们将创建表作为构建过程的一部分&…

1区老牌神刊,仅37天录用!网友:“这审稿速度救了我一条命”!

关注GZH【欧亚科睿学术】&#xff0c;GET完整版2023JCR分区列表&#xff01; ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 期刊信息概况 【期刊类型】计算机科学类SCIE&EI 【出版社】ELSEVIER出版社 【期刊概况】IF&#xff1a;4.0-5.0&#xff0c;JCR1区&#xff0c;中科院3区…