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

java泛型编程初识

java泛型编程初识

    • 1.泛型解决的是什么问题
    • 2.泛型实例化语句
    • 3.自定义泛型
      • 1)自定义泛型类或接口
      • 2)自定义泛型方法
    • 4.泛型使用中的继承和通配
      • 1)通配
      • 2)继承使用限制

1.泛型解决的是什么问题

很多类、接口、方法中逻辑相同,只是操作的对象类型不同,这个时候就可以使用泛型。泛型可以定义一个模板,这个模板中实现了相对应的逻辑,但是实际操作的对象类型需要指定。泛型字面意思就是将类型泛化,各种类型都可以。

2.泛型实例化语句

List、Set、map等接口及其子类就使用到了泛型,可以在<>内指定实际存储数据类型,这个类型必须是引用类型,int、double这些基本类型不能用来实例化泛型。
实际存储对象的类型可以在实例化时指定,如果实例化时不指定实际类型,那么存储对象的类型就是Object
示例:

// 指定实际存储数据类型
List<String> list = new ArrayList<>();
// 不指定实际存储数据类型,默认存储Object类型
List list2 = new ArrayList<>();

3.自定义泛型

泛型类成员对象或方法都不能是静态的,因为类在加载时不知道实际的数据类型,不能为其分配空间

1)自定义泛型类或接口

语法:
class<T1, T2, T3…>{}
interface<T1, T2, T3…>{}
T1,T2,T3是类型占位符,根据实际指定的类型进行替换,如果实际传入String,Double,Integer,那么T1就被替换为String,T2就被替换为Double,T3就被替换为Integer。当然也可以定义更多的类型
泛型类示例:

public class Test6 {public static void main(String[] args) {// 指定实际类型CuteCat<String, Integer> cuteCat = new CuteCat<>("天天", 3);cuteCat.show();// 不指定类型,根据传入数据推导CuteCat cuteCat1 = new CuteCat("疯疯", 4);cuteCat1.show();}
}class CuteCat<T1, T2> {private T1 value1;private T2 value2;public CuteCat(T1 value1, T2 value2) {this.value1 = value1;this.value2 = value2;}public void show() {System.out.println("value1:" + value1);System.out.println("value2:" + value2);}
}

泛型接口示例:

public class Test7 {public static void main(String[] args) {Dragon<ArrayList, Hashtable> dragon = new Dragon<ArrayList, Hashtable>() {@Overridepublic void func1(ArrayList arrayList) {System.out.println(arrayList.getClass());}@Overridepublic Hashtable transfer(ArrayList arrayList) {System.out.println("transfer");return null;}};dragon.func1(new ArrayList());dragon.transfer(new ArrayList());}
}interface Dragon<T1, T2> {void func1(T1 t1);T2 transfer(T1 t1);
}

2)自定义泛型方法

方法中需要使用指定的泛型类对象,这样的方法是泛型方法
语法:
权限修饰符<T1,T2…> 返回值类型 方法名(参数列表){}
示例:

public class Test5 {public<K, V> void func1(K key, V value) {System.out.println(key + ":" + value);}public static void main(String[] args) {Test5 test5 = new Test5();test5.func1("age", 15);}
}

4.泛型使用中的继承和通配

1)通配

<>使用?表示可以使用任意引用类型
示例:

List<?> list = new ArrayList<String>();
List<?> list2 = new ArrayList<Double>();
List<?> list3 = new ArrayList<Date>();

2)继承使用限制

在泛型中指定类型为父类后不能直接使用子类来实例化,必须使用extends关键字;
另外泛型中指定类型为子类后如果想用父类实例化必须使用super关键字;
示例:

public class Test5 {// 规定泛型必须是GrandFather及其子类,不仅仅是直接子类List<? extends GrandFather> list = new ArrayList<Baby>();// 规定泛型必须是Son类及其父类,不仅仅是直接父类List<? super Son> list2 = new ArrayList<Father>();
}class GrandFather{}class Father extends GrandFather{}class Son extends Father{}class Baby extends Son{}

相关文章:

java泛型编程初识

java泛型编程初识1.泛型解决的是什么问题2.泛型实例化语句3.自定义泛型1)自定义泛型类或接口2)自定义泛型方法4.泛型使用中的继承和通配1)通配2)继承使用限制1.泛型解决的是什么问题 很多类、接口、方法中逻辑相同&#xff0c;只是操作的对象类型不同&#xff0c;这个时候就可…...

代码随想录算法训练营 || 贪心算法 1005 134 135

Day291005.K次取反后最大化的数组和力扣题目链接给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#xff1a;我们选择某个索引 i 并将 A[i] 替换为 -A[i]&#xff0c;然后总共重复这个过程 K 次。&#xff08;我们可以多次选择同一个索引 i。&#xff09;以这种方…...

Spring框架面试题

springboot的自动装配原理 主类上的SpringBootApplication存在EnableAutoConfiguration&#xff0c;EnableAutoConfiguration会导入AutoConfigurationImportSelector组件&#xff0c;其AutoConfigurationImportSelector$AutoConfigurationGroup#process()方法会读取当前应用所有…...

纯x86汇编实现的多线程操作系统实践 - 第五章 AP的守护执行

AP的32位保护模式代码的后半部分从0x8001C000开始执行&#xff0c;完成的工作主要有&#xff1a;初始化必要的中断给BSP发送启动成功的消息创建各AP的系统进程创建各AP的用户进程循环显示各AP中用户进程执行的时间比例5.1 初始化中断5.1.1总体初始化各AP调用init_interrupt_fun…...

2023年全国最新高校辅导员精选真题及答案7

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 71.在北京曾经发现一处战国时期的遗址&#xff0c;从中出土了燕、韩、赵、魏等国铸币3876…...

使用windwow windbg 吃透64位分页内存管理

前言 分页基础概念是操作系统基础知识&#xff0c;网上已经有太多太多了。所以本文记录使用windwow内核调试工具验证理论知识。 具体可以参阅intel volume3的 4.1.1 Four Paging Modes章节。 简而言之&#xff1a;CR0.PG 0表示不开启分页.并且根据CR4各种标志开启不同类别的…...

Java知识复习(五)JVM虚拟机

1、虚拟机的自动内存管理和C/C的区别 C/C开发程序时需要为每一个new操作去写对应的delete/free操作&#xff0c;不容易出现内存泄漏和溢出问题。而Java程序将内存控制权交给了Java虚拟机 2、JVM的运行机制 1、Java程序的具体运行过程如下&#xff1a; Java源文件被编译器编…...

房屋出租管理系统

1. 铺垫 1.1 项目真实开发的过程 上来要做什么&#xff1f;&#xff1f;&#xff1f;&#xff1f; 有电脑—》配环境&#xff08;JDK、IDEA、MAVEN……&#xff09; 这个项目&#xff1a;房屋管理系统 从什么角度出发&#xff0c;第一步做什么&#xff1f;&#xff1f; 架构 …...

2023年全国最新食品安全管理员精选真题及答案6

百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 51.制定《中华人民共和国食品安全法》的目的是为了保证食品安全&#xf…...

C++中的文件操作

文件操作 所有数据程序运行结束后都会释放通过文件可以将数据持久化头文件文件类型分为两种 文本文件—文件以文本的ASCII码形式存储在计算机中二进制文件—文件以文本的二进制存储在计算机中 操作文件的三大类 ofstream—写操作ifstream—读操作fstream—读写操作 文本文件 写…...

监控生产环境中的机器学习模型

简介 一旦您将机器学习模型部署到生产环境中&#xff0c;很快就会发现工作还没有结束。 在许多方面&#xff0c;旅程才刚刚开始。你怎么知道你的模型的行为是否符合你的预期&#xff1f;下周/月/年&#xff0c;当客户&#xff08;或欺诈者&#xff09;行为发生变化并且您的训练…...

15s了解什么是物联网技术

目录 15s了解什么是物联网技术 15s了解什么是物联网技术 什么是物联网技术。 简单地说,物联网就是把所有的物体连接起来,相互作用,形成一个互联互通的网络,这就是物联网。如果说互联网是我们身体的虚拟大脑,那么物联网就是我们身体的感知系统,就像眼睛和耳朵-样,让我们…...

敲出来的真理-mysql备份大全,备份命令,还原命令,定时备份

mysqldump命令全量备份数据全量标准语句格式mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 1.备份全部数据库的数据和结构mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql2.备份全部数据库的结构&#xff08;加 -d 参数&#x…...

ATTCK实战系列-红队评估(一)

from ATT&CK实战系列-红队评估(一) 环境搭建 下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 将三个虚拟机启动起来 除了windows 7那个主机&#xff0c;其他都只设置成仅主机模式 windows 7添加两个网卡&#xff0c;一个是仅主机&#xff0c;一个是NAT …...

学python的第二天---差分

一、改变数组元素&#xff08;差分&#xff09;方法一&#xff1a;差分数组map(int,input().split())for b in arr[:n]:print(1 if b else 0,end )方法二&#xff1a;区间合并interval.sort(keylambda x:x[0])二、差分a [0] list(map(int, input().split())) a[n 1:]三、差…...

数据结构入门5-2(数和二叉树)

目录 注&#xff1a; 树的存储结构 1. 双亲表示法 2. 孩子表示法 3. 重要&#xff1a;孩子兄弟法&#xff08;二叉树表示法&#xff09; 森林与二叉树的转换 树和森林的遍历 1. 树的遍历 2. 森林的遍历 哈夫曼树及其应用 基本概念 哈夫曼树的构造算法 1. 构造过程 …...

把Redis当作队列来用,到底合适吗?

文章目录 前言从最简单的开始:List 队列发布/订阅模型:Pub/Sub趋于成熟的队列:Stream1) Stream 是否支持「阻塞式」拉取消息?2) Stream 是否支持发布 / 订阅模式?3) 消息处理时异常,Stream 能否保证消息不丢失,重新消费?4) Stream 数据会写入到 RDB 和 AOF 做持久化吗?…...

Python学习-----项目设计1.0(设计思维和ATM环境搭建)

目录 前言&#xff1a; 项目开发流程 MVC设计模式 什么是MVC设计模式&#xff1f; ATM项目要求 ATM项目的环境搭建 前言&#xff1a; 我个人学习Python大概也有一个月了&#xff0c;在这一个月中我发布了许多关于Python的文章&#xff0c;建立了一个Python学习起步的专栏…...

(九)python网络爬虫(理论+实战)——爬虫实战:指定关键词的百度新闻爬取

系列文章目录 (1)python网络爬虫—快速入门(理论+实战)(一) (2)python网络爬虫—快速入门(理论+实战)(二) (3) python网络爬虫—快速入门(理论+实战)(三) (4)python网络爬虫—快速入门(理论+实战)(四) (5)...

数据分析面试、笔试题汇总+解析(六)

&#xff08;接上篇&#xff09; 面试题&#xff08;MySQL篇&#xff09; 3. 如何提高MySQL的查询速度&#xff1f; 考点解析&#xff1a; 考察面试者对MySQL查询优化的理解 参考答案&#xff1a; &#xff08;因为这个问题如果回答的详细一点可以写上一整篇&#xff0c;…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...