Java高级编程——泛型(泛型类、泛型接口、泛型方法,完成详解,并附有案例+代码)

文章目录

  • 泛型
    • 21.1 概述
    • 21.2 泛型类
    • 21.3 泛型方法
    • 21.4 泛型接口

泛型

21.1 概述

JDK5中引入的特性,在编译阶段约束操作的数据类型,并进行检查

泛型格式:<数据类型>

泛型只能支持引用数据类型,如果写基本数据类型需要写对应的包装类。

泛型好处:

  • 统一数据类型
  • 把运行时期的问题提到了编译期间,避免了强制类型转换可能出现的异常,因为编译阶段类型就能确定下来。

泛型细节:

  • 泛型中不能写基本数据类型

    因为基本数据类型不能转成Object类型,包装类才能转成Object类型

  • 指定泛型后传递数据时,可以传入该类类型或者其子类类型

  • 如果不写泛型,类型默认是Object

21.2 泛型类

使用场景:当一个类中,某个变量的数据类型不确定时,可以定义带有泛型的类。

格式:修饰符 class 类名<类型>{....}举例:E可以理解为变量,但不是变量,不是记录数据的,是用来记录数据类型的public class ArrayList<E>{//.....  当创建给类对象时,E就确定类型}
//自定义泛型类
public class MyArrayList<E>{Object[] obj = new Object[5];int size; // size:表示长度,即存了几个元素// E:表示不确定的类型// e:形参的名字,变量名// 添加元素public boolean add(E e){obj[size] = e;size++;return true;}// 获取元素public E get(int index){return (E) obj[index];}// 重写toString方法@Overridepublic String toString() {return Arrays.toString(obj);}
}
==================================================public class Test {public static void main(String[] args) {//创建自己定义泛型类的对象MyArrayList<String> list = new MyArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");System.out.println(list);//[aaa, bbb, ccc, null, null]String s = list.get(0);System.out.println(s);//aaaMyArrayList<Integer> list1 = new MyArrayList<>();list1.add(1);list1.add(2);list1.add(3);Integer integer = list1.get(1);System.out.println(integer);//2}
}

21.3 泛型方法

方法中形参类型不确定时:

  • 方案1:使用类名后定义的泛型(如21.2中的add方法)

    在本类里所有方法都可以用

  • 方案2:在方法申明上定义自己的泛型

    只有本方法能用

格式:修饰符 <类型> 返回值类型 方法名(类型 变量名){}
举例:public <T> void show(T t){// 调用该方法时,T才能确定类型
}
public class ListUtil {// 私有化构造方法,不让外界本类的对象private ListUtil(){}// 类中定义静态方法addAll, 用来添加多个集合的元素
//public static <E> void addAll(ArrayList<E> list,E e1,E e2){//     list.add(e1);//     list.add(e2);// }//可变参数 E...epublic static <E> void addAll(ArrayList<E> list,E...e){for (E element : e) {list.add(element);}}public void show(){System.out.println("这是自定义工具类....");}}
==========================================public class Test {public static void main(String[] args) {// 在创建对象时,就可以确定泛型方法的形参类型ArrayList<String> list = new ArrayList<>();ListUtil.addAll(list,"6","8");System.out.println(list);//[6, 8]ArrayList<Integer> list2 = new ArrayList<>();ListUtil.addAll(list2,5,1);System.out.println(list2);//[5, 1]}
}

21.4 泛型接口

格式:修饰符 interface 接口名<类型>{}举例:public interface List<E>{}泛型接口的两种使用方式:1.实现类给出具体的类型2.实现类延续泛型,创建实现类对象时再确定类型
// 1.实现类给出具体的类型,实现List接口
public class MyArrayList2 implements List<String> {// 省略重写List里的抽象方法
}
==================================================public class Test {public static void main(String[] args) {//MyArrayList集合中只能存字符串,//创建MyArrayList对象时不用指定泛型MyArrayList list = new MyArrayList();list.add("666");}
}
// 2.实现类延续泛型,创建实现类对象时再确定类型
public class MyArrayList02<E> implements List<E> {// 省略重写List里的抽象方法
}
==================================================public class Test02 {public static void main(String[] args) {// 2.实现类延续泛型,创建实现类对象时再确定类型MyArrayList02<Integer> list = new MyArrayList02<>();list.add(6);}
}

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

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

相关文章

使用 UWA Gears 定位游戏内存问题

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台&#xff0c;提供了实时监测和截帧分析功能&#xff0c;帮助您精准定位性能热点&#xff0c;提升应用的整体表现。 内存不足、内存泄漏和过度使用等问题&#xff0c;常常导致游戏出现卡顿、崩溃&#xff0c;甚至影响…

CSS | 如何来避免 FOUC(无样式内容闪烁)现象的发生?

一、什么是 FOUC(无样式内容闪烁)? ‌FOUC&#xff08;Flash of Unstyled Content&#xff09;是指网页在加载过程中&#xff0c;由于CSS样式加载延迟或加载顺序不当&#xff0c;导致页面出现闪烁或呈现出未样式化的内容的现象。‌ 这种现象通常发生在HTML文档已经加载&…

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表 一.相关命令 1.hset key field value 一次可以设置多个 返回值是设置成功的个数 注意&#xff0c;哈希表中的键值对&#xff0c;键是唯一的而值可以重复 所以有下面的结果&#xff1a; key中原来已经有了f1&#xff0c;所以再使用hse…

RTSP学习

RTSP基本原理 实时流传输协议(RTSP:RealTimeStreaming Protocol1)是一种网络传输协议,旨在发送低延迟流。 该协议由RealNetworks,Netscape和哥伦比亚大学的专家在1996年开发。它定义了应如何打包流中的数据以进行传输。 类似一个控制命令的协议play teardown 负责音视频的数据…

二叉树(Java)

一.1.树形结构概念的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a;…

大模型培训讲师叶梓:Llama Factory 微调模型实战分享提纲

LLaMA-Factory ——一个高效、易用的大模型训练与微调平台。它支持多种预训练模型&#xff0c;并且提供了丰富的训练算法&#xff0c;包括增量预训练、多模态指令监督微调、奖励模型训练等。 LLaMA-Factory的优势在于其简单易用的界面和强大的功能。用户可以在不编写任何代码的…

【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField

前言&#xff1a; 上篇博客我们讲到redis五大基本数据类型&#xff08;也是就下图的第一列&#xff09;。 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客文章浏览阅读1k次&#xff0c;点赞24次&#xff0c;收藏10次。该篇适用于速成redis。本篇我们将讲解&#…

Leetcode 2246. 相邻字符不同的最长路径(一般树)树形dp C++实现

问题&#xff1a;Leetcode 2246. 相邻字符不同的最长路径 给你一棵 树&#xff08;即一个连通、无向、无环图&#xff09;&#xff0c;根节点是节点 0 &#xff0c;这棵树由编号从 0 到 n - 1 的 n 个节点组成。用下标从 0 开始、长度为 n 的数组 parent 来表示这棵树&#x…

001.从0开始实现线性回归(pytorch)

000动手从0实现线性回归 0. 背景介绍 我们构造一个简单的人工训练数据集&#xff0c;它可以使我们能够直观比较学到的参数和真实的模型参数的区别。 设训练数据集样本数为1000&#xff0c;输入个数&#xff08;特征数&#xff09;为2。给定随机生成的批量样本特征 X∈R10002 …

【Delphi】扩展现有组件创建新的 FireMonkey 组件(步骤二)

实现指定格式的属性 步骤 1 中创建的 TClockLabel 组件需要在显示当前时间时定义日期时间格式作为属性&#xff0c;以便组件用户可以指定。 一、实现指定格式的属性 要实现格式属性&#xff0c;请在 TClockLabel class 的发布部分添加以下一行&#xff1a; property Form…

CST电磁仿真77GHz汽车雷达保险杠

77G毫米波雷达仿真时&#xff0c;要考虑天线罩和保险杠的影响。通常保险杠都是多层结构&#xff0c;有的层非常薄。如果采用传统的3D建模方法&#xff0c;会导致网格数量巨大&#xff0c;进而影响到求解效率。 三维保险杠&#xff08;bumper&#xff09;模型如下图所示&…

【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析

文章目录 C string 类详解&#xff1a;从入门到精通前言第一章&#xff1a;C 语言中的字符串 vs C string 类1.1 C 语言中的字符串1.2 C string 类的优势 第二章&#xff1a;string 类的构造与基础操作2.1 string 类的构造方法2.1.1 示例代码&#xff1a;构造字符串 2.2 string…

部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现

部署资源 AUTODL 使用最小3080Ti 资源&#xff0c;cuda > 12.0使用云服务器&#xff0c;部署fastGPT oneAPI&#xff0c;M3E 模型 操作步骤 配置代理 export HF_ENDPOINThttps://hf-mirror.com下载qwen2模型 - 如何下载huggingface huggingface-cli download Qwen/Qwen2-…

flutter遇到问题及解决方案

目录 1、easy_refresh相关问题 2、 父子作用域关联问题 3. 刘海屏底部安全距离 4. 了解保证金弹窗 iOS端闪退 &#xff08;待优化&#xff09; 5. loading无法消失 6. dialog蒙版问题 7. 倒计时优化 8. scrollController.offset报错 9. 断点不走 10.我的出价报红 11…

Python3爬虫教程-HTTP基本原理

HTTP基本原理 1&#xff0c;URL组成部分详解2&#xff0c;HTTP和HTTPS3&#xff0c;HTTP请求过程4&#xff0c;请求&#xff08;Request&#xff09;请求方法&#xff08;Request Method&#xff09;请求的网址&#xff08;Request URL&#xff09;请求头&#xff08;Request H…

Redmi Note 7 Pro(violet)免授权9008文件分享及刷机教程

获取文件 关注微信公众号 heStudio Community回复 violet_9008 获取下载链接。 刷机教程 下载搞机助手&#xff08;可以从上方文件中获取&#xff09;并安装。手机按音量减键和电源键进入 Fastboot 模式&#xff0c; 打开搞机助手&#xff0c;点击进入 9008 模式 等待手机…

IDEA 关闭自动补全功能(最新版本)

文章目录 一、前言二、关闭自动补全三、最终效果 一、前言 在最新的 IDEA 中发布了自动补全功能&#xff0c;当你输入代码时&#xff0c;IDEA 会自动显示你可能想输入的代码&#xff0c;减少手动输入的工作量&#xff0c;它会根据上下文提供正确的选项&#xff0c;提高代码的准…

Java-数据结构-二叉树-习题(三)  ̄へ ̄

文本目录&#xff1a; ❄️一、习题一(前序遍历非递归)&#xff1a; ▶ 思路&#xff1a; ▶ 代码&#xff1a; ❄️二、习题二(中序遍历非递归)&#xff1a; ▶ 思路&#xff1a; ▶ 代码&#xff1a; ❄️三、习题三(后序遍历非递归)&#xff1a; ▶ 思路&#xff1a; …

vue使用PDF.JS踩的坑--部署到服务器上显示pdf.mjs viewer.mjs找不到资源

之前项目使用的pdf.js 是2.15.349版本&#xff0c;最近换了一个4.6.82的版本&#xff0c;在本地上浏览文件运行的好好的&#xff0c;但是发布到服务器&#xff08;IIS&#xff09;上打不开文件&#xff0c;控制台提示找不到pdf.mjs viewer.mjs。 之前使用的2.15.349pdf和viewer…