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.泛型解决的是什么问题 很多类、接口、方法中逻辑相同,只是操作的对象类型不同,这个时候就可…...
代码随想录算法训练营 || 贪心算法 1005 134 135
Day291005.K次取反后最大化的数组和力扣题目链接给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方…...
Spring框架面试题
springboot的自动装配原理 主类上的SpringBootApplication存在EnableAutoConfiguration,EnableAutoConfiguration会导入AutoConfigurationImportSelector组件,其AutoConfigurationImportSelector$AutoConfigurationGroup#process()方法会读取当前应用所有…...
纯x86汇编实现的多线程操作系统实践 - 第五章 AP的守护执行
AP的32位保护模式代码的后半部分从0x8001C000开始执行,完成的工作主要有:初始化必要的中断给BSP发送启动成功的消息创建各AP的系统进程创建各AP的用户进程循环显示各AP中用户进程执行的时间比例5.1 初始化中断5.1.1总体初始化各AP调用init_interrupt_fun…...
2023年全国最新高校辅导员精选真题及答案7
百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 71.在北京曾经发现一处战国时期的遗址,从中出土了燕、韩、赵、魏等国铸币3876…...
使用windwow windbg 吃透64位分页内存管理
前言 分页基础概念是操作系统基础知识,网上已经有太多太多了。所以本文记录使用windwow内核调试工具验证理论知识。 具体可以参阅intel volume3的 4.1.1 Four Paging Modes章节。 简而言之:CR0.PG 0表示不开启分页.并且根据CR4各种标志开启不同类别的…...
Java知识复习(五)JVM虚拟机
1、虚拟机的自动内存管理和C/C的区别 C/C开发程序时需要为每一个new操作去写对应的delete/free操作,不容易出现内存泄漏和溢出问题。而Java程序将内存控制权交给了Java虚拟机 2、JVM的运行机制 1、Java程序的具体运行过程如下: Java源文件被编译器编…...
房屋出租管理系统
1. 铺垫 1.1 项目真实开发的过程 上来要做什么???? 有电脑—》配环境(JDK、IDEA、MAVEN……) 这个项目:房屋管理系统 从什么角度出发,第一步做什么?? 架构 …...
2023年全国最新食品安全管理员精选真题及答案6
百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 51.制定《中华人民共和国食品安全法》的目的是为了保证食品安全…...
C++中的文件操作
文件操作 所有数据程序运行结束后都会释放通过文件可以将数据持久化头文件文件类型分为两种 文本文件—文件以文本的ASCII码形式存储在计算机中二进制文件—文件以文本的二进制存储在计算机中 操作文件的三大类 ofstream—写操作ifstream—读操作fstream—读写操作 文本文件 写…...
监控生产环境中的机器学习模型
简介 一旦您将机器学习模型部署到生产环境中,很快就会发现工作还没有结束。 在许多方面,旅程才刚刚开始。你怎么知道你的模型的行为是否符合你的预期?下周/月/年,当客户(或欺诈者)行为发生变化并且您的训练…...
15s了解什么是物联网技术
目录 15s了解什么是物联网技术 15s了解什么是物联网技术 什么是物联网技术。 简单地说,物联网就是把所有的物体连接起来,相互作用,形成一个互联互通的网络,这就是物联网。如果说互联网是我们身体的虚拟大脑,那么物联网就是我们身体的感知系统,就像眼睛和耳朵-样,让我们…...
敲出来的真理-mysql备份大全,备份命令,还原命令,定时备份
mysqldump命令全量备份数据全量标准语句格式mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 1.备份全部数据库的数据和结构mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql2.备份全部数据库的结构(加 -d 参数&#x…...
ATTCK实战系列-红队评估(一)
from ATT&CK实战系列-红队评估(一) 环境搭建 下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 将三个虚拟机启动起来 除了windows 7那个主机,其他都只设置成仅主机模式 windows 7添加两个网卡,一个是仅主机,一个是NAT …...
学python的第二天---差分
一、改变数组元素(差分)方法一:差分数组map(int,input().split())for b in arr[:n]:print(1 if b else 0,end )方法二:区间合并interval.sort(keylambda x:x[0])二、差分a [0] list(map(int, input().split())) a[n 1:]三、差…...
数据结构入门5-2(数和二叉树)
目录 注: 树的存储结构 1. 双亲表示法 2. 孩子表示法 3. 重要:孩子兄弟法(二叉树表示法) 森林与二叉树的转换 树和森林的遍历 1. 树的遍历 2. 森林的遍历 哈夫曼树及其应用 基本概念 哈夫曼树的构造算法 1. 构造过程 …...
把Redis当作队列来用,到底合适吗?
文章目录 前言从最简单的开始:List 队列发布/订阅模型:Pub/Sub趋于成熟的队列:Stream1) Stream 是否支持「阻塞式」拉取消息?2) Stream 是否支持发布 / 订阅模式?3) 消息处理时异常,Stream 能否保证消息不丢失,重新消费?4) Stream 数据会写入到 RDB 和 AOF 做持久化吗?…...
Python学习-----项目设计1.0(设计思维和ATM环境搭建)
目录 前言: 项目开发流程 MVC设计模式 什么是MVC设计模式? ATM项目要求 ATM项目的环境搭建 前言: 我个人学习Python大概也有一个月了,在这一个月中我发布了许多关于Python的文章,建立了一个Python学习起步的专栏…...
(九)python网络爬虫(理论+实战)——爬虫实战:指定关键词的百度新闻爬取
系列文章目录 (1)python网络爬虫—快速入门(理论+实战)(一) (2)python网络爬虫—快速入门(理论+实战)(二) (3) python网络爬虫—快速入门(理论+实战)(三) (4)python网络爬虫—快速入门(理论+实战)(四) (5)...
数据分析面试、笔试题汇总+解析(六)
(接上篇) 面试题(MySQL篇) 3. 如何提高MySQL的查询速度? 考点解析: 考察面试者对MySQL查询优化的理解 参考答案: (因为这个问题如果回答的详细一点可以写上一整篇,…...
vue3+rust个人博客建站日记3-编写主页
内容 绘制了主页的基本布局设置了封装了header栏组件并设置了全局黑夜模式. 选择一个组件库-Naive UI 如果没有设计能力,又想开发出风格统一的前端页面。就一定要选择一个漂亮的组件库。 本次项目选择使用Naive UI,NaivUI库曾被Vue框架作者尤雨溪推荐…...
前端常考react面试题(持续更新中)
react diff 算法 我们知道React会维护两个虚拟DOM,那么是如何来比较,如何来判断,做出最优的解呢?这就用到了diff算法 diff算法的作用 计算出Virtual DOM中真正变化的部分,并只针对该部分进行原生DOM操作,而…...
C++11多线程编程 二:多线程通信,同步,锁
C11多线程编程 一:多线程概述 C11多线程编程 二:多线程通信,同步,锁 C11多线程编程 三:锁资源管理和条件变量 2.1 多线程的状态及其切换流程分析 线程状态说明: 初始化(Init)&am…...
js——原型和原型链
最近看了很多面试题,看到这个js原型是常考点,于是,我总结了一些该方面的知识点分享给大家,其实原型就是那么一回事,搞明白了就没啥了。结果如下图所示:原型原型又可分为显式原型和隐式原型1.1显式原型显式原…...
[计算机网络(第八版)]第三章 数据链路层(学习笔记)
物理层解决了相邻节点透明传输比特的问题 3.1 数据链路层的几个共同问题 3.1.1 数据链路和帧 链路: 从一个节点到相邻节点的一段物理线路,中间没有任何其他的交换节点 数据链路: 节点间的逻辑通道是把实现控制数据传输的协议的硬件和软件加…...
void在不同场景下的意义
指针一般有三种含义:一是指明数据的位置,体现在指针的值,表示一个地址。二是表示数据类型的大小,例如int指针表示四个字节为一组数据,体现在指针的加减法如何计算。三是表示数据如何被解释,例如float指针和…...
Flume简介
Flume是一个高可用,高可靠,分布式的海量日志采集、聚合和传输的系统,能够有效的收集、聚合、移动大量的日志数据。 优点: 使用Flume采集数据不需要写一行代码,注意是一行代码都不需要,只需要在配置文件中…...
java简单学习
Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象ÿ…...
Vue2 组件基础使用、父子组件之间的传值
一、什么是组件如画红框的这些区域都是由vue里的各种组件组成、提高复用信通常一个应用会以一棵嵌套的组件树的形式来组织:例如,你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它的像导航链接、博文之类的组件。为了能在模板中使用…...
代码随想录算法训练营 || 贪心算法 122 55 45
Day28122.买卖股票的最佳时机II力扣题目链接给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易…...
wordpress 密码访问/长沙关键词优化费用
目录 VI/VIM编辑器常用操作介绍: 1.VI和VIM是什么 2.一般模式 2.1常用语法 3.编辑模式 3.1常用语法 4.指令模式 4.1基本语法 5.模式转换 6.VI/VIM键盘图 1.VI和VIM是什么 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。VIM 编辑器是从 VI…...
网站建设续费是什么费用/轻松seo优化排名
今天上午的蓝桥杯比赛让我正视了很多以前没有注意的问题,也找到了很多自以为会了,其实是盲点的知识点。 10个题都不难,放到平时,如果是在oj上,肯定能全部AC,可是比赛的时候,写的并不好。 尤其…...
wordpress后天地址/西安百度竞价代运营
在动手写这篇之前,在朋友圈做了个调查,看到大家对百度轻应用的热情很高。 针对大家提的问题,和我对轻应用的理解,整理如下: 1、何为轻应用、微应用,及区别在哪里? 轻应用是在2013年百度世界大会…...
郑州 服装网站建设/做做网站
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/2826 我在这个课程的目标是 熟练指针,能够精通关于数组内部运作原理 这个作业在那个具体方面帮助我实现目标 如何输出…...
网站用户体验方案/关键词林俊杰
ios下最简单的正则,RegexKitLite 1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中。备用地址:http://www.cocoachina.com/bbs/job.php?action-download-pid-135286-t…...
建网站被封了/百度手机助手app下载官网
第二章 项目初始化和第一个小例子.md初始化项目项目目录介绍自定义爬虫类自定义第一个爬虫录入代码代码解释:运行爬虫运行结果代码逐条分析简易版本经过了上一章的学习,我们已经在开发环境上安装好了scrapy的包,接下来我们就将初始化一个项目…...