当前位置: 首页 > 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;…...

别再手动改Hosts了!用K8S Gateway API轻松搞定基于请求头的AB测试(OpenResty实战)

告别手动配置&#xff1a;基于K8S Gateway API的智能AB测试实战指南 每次功能迭代时&#xff0c;你是否还在反复修改本地Hosts文件来切换测试环境&#xff1f;或是为了验证某个接口在不同版本间的表现差异&#xff0c;不得不频繁重启服务或调整代理配置&#xff1f;这种低效的手…...

从idea ai插件到在线原型:用快马平台快速构建你的智能代码生成器

最近在开发中频繁使用IDEA的AI插件辅助编码&#xff0c;发现这类工具能大幅减少重复劳动。但插件功能往往局限于当前IDE环境&#xff0c;于是萌生了一个想法&#xff1a;能否把这种智能生成能力搬到线上&#xff0c;做成一个轻量级的Web工具&#xff1f;经过在InsCode(快马)平台…...

GLM-5.1 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路

GLM-5.1 全面支持与 Gemini CLI 集成&#xff1a;HagiCode 的多模型进化之路 本文介绍了 HagiCode 平台近期的重要更新——智谱 AI GLM-5.1 模型的全面支持&#xff0c;以及 Gemini CLI 作为第十个 Agent CLI 的成功集成。这两项更新进一步强化了平台的多模型能力和多 CLI 生态…...

Wan2.2-I2V-A14B实战案例:地方政府生成‘乡村振兴’政策解读动画短视频系列

Wan2.2-I2V-A14B实战案例&#xff1a;地方政府生成乡村振兴政策解读动画短视频系列 1. 项目背景与需求分析 近年来&#xff0c;随着数字政务的快速发展&#xff0c;各级地方政府越来越重视利用新媒体技术进行政策宣传。某地方政府计划开展"乡村振兴"系列政策解读工…...

MT5 Zero-Shot参数详解:Temperature与Top-P对中文改写多样性的影响

MT5 Zero-Shot参数详解&#xff1a;Temperature与Top-P对中文改写多样性的影响 1. 项目概述 MT5 Zero-Shot Chinese Text Augmentation 是一个基于 Streamlit 和阿里达摩院 mT5 模型构建的本地化 NLP 工具。这个工具专门用于中文句子的语义改写和数据增强&#xff0c;能够在保…...

pandas API on Spark 与 pandas / PySpark 互转指南

1. 为什么会有互转需求 pandas API on Spark 的定位很特殊&#xff1a;它既想保留 pandas 的使用体验&#xff0c;又建立在 Spark 的分布式执行之上。因此开发时常见的场景有三种&#xff1a; 已经有 pandas 代码&#xff0c;想迁移到分布式环境已经在用 PySpark DataFrame&…...

ssm+java2026年毕设体育赛事管理系统App【源码+论文】

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于赛事管理问题的研究&#xff0c;现有研究主要以大型综合性体育赛事&#xff08;如奥运会、亚运会&#xff09;的信息化管理…...

从零开始!DeepSeek-R1-Distill-Qwen-1.5B完整部署流程详解

从零开始&#xff01;DeepSeek-R1-Distill-Qwen-1.5B完整部署流程详解 1. 模型简介与核心优势 1.1 什么是DeepSeek-R1-Distill-Qwen-1.5B&#xff1f; DeepSeek-R1-Distill-Qwen-1.5B是一款经过知识蒸馏优化的轻量级语言模型&#xff0c;由DeepSeek团队基于Qwen-1.5B架构开发…...

ResNet50人脸重建作品集:cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成

ResNet50人脸重建作品集&#xff1a;cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成 1. 项目介绍与核心价值 cv_resnet50_face-reconstruction 是一个基于ResNet50架构的人脸重建项目&#xff0c;专门为艺术创作和设计工作提供高质量的人脸底图生成服务…...

DynamicColor跨平台开发指南:iOS、macOS、watchOS的统一颜色解决方案

DynamicColor跨平台开发指南&#xff1a;iOS、macOS、watchOS的统一颜色解决方案 【免费下载链接】DynamicColor Yet another extension to manipulate colors easily in Swift and SwiftUI 项目地址: https://gitcode.com/gh_mirrors/dy/DynamicColor DynamicColor是一…...