【Java集合进阶】泛型的通配符和综合练习

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

泛型的继承和通配符

动物集合练习

总结


泛型的继承和通配符

  • 泛型不具备继承性,但是数据具备继承性
     *      ?也表示不确定的类型*      他可以进行类型的限定*      ? extends E: 表示可以传递E或者E所有的子类类型*      ? super E:表示可以传递E或者E所有的父类类型public static<E> void method(ArrayList<? extends GenericsDemo5.Ye> list){}

泛型类GenericsDemo5

package list;import java.util.ArrayList;public class GenericsDemo5 {public void main(String[] args) {/*泛型不具备继承性,但是数据具备继承性*///创建集合的对象ArrayList<Ye> list1 = new ArrayList<Ye>();ArrayList<Fu> list2 = new ArrayList<Fu>();ArrayList<Zi> list3 = new ArrayList<Zi>();//调用method方法method(list1);//method(list2);//数据继承list1.add(new Ye());list1.add(new Fu());list1.add(new Zi());}public static void method(ArrayList<Ye> list){}class Ye{}class Fu extends Ye{}class Zi extends Fu{}
}

泛型类:GenericsDemo6

package list;import java.util.ArrayList;public class GenericsDemo6 {public static void main(String[] args) {/**   需求:*       定义一个方法,形参是一个集合,但是集合中的数据类型不确定。** *///创建集合的对象ArrayList<GenericsDemo5.Ye> list1 = new ArrayList<GenericsDemo5.Ye>();ArrayList<GenericsDemo5.Fu> list2 = new ArrayList<GenericsDemo5.Fu>();ArrayList<GenericsDemo5.Zi> list3 = new ArrayList<GenericsDemo5.Zi>();method(list1);method(list2);method(list3);}/** 此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。* 弊端:*      利用泛型方法有一个小弊端,此时他可以接受任意的数据类型*      Ye  Fu   Zi    Student** 希望:本方法虽然不确定类型,但是以后我希望只能传递Ye Fu Zi** 此时我们就可以使用泛型的通配符:*      ?也表示不确定的类型*      他可以进行类型的限定*      ? extends E: 表示可以传递E或者E所有的子类类型*      ? super E:表示可以传递E或者E所有的父类类型** 应用场景:*      1.如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。*      2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以泛型的通配符* 泛型的通配符:*      关键点:可以限定类型的范围。** */public static<E> void method(ArrayList<? extends GenericsDemo5.Ye> list){}
}

动物集合练习

test1测试类:

package Test;import java.util.ArrayList;
import java.util.List;public class test1 {public static void main(String[] args) {/*需求:定义一个继承结构:动物|                           |猫                          狗|      |                    |      |波斯猫   狸花猫                泰迪   哈士奇属性:名字,年龄行为:吃东西波斯猫方法体打印:一只叫做XXX的,X岁的波斯猫,正在吃小饼干狸花猫方法体打印:一只叫做XXX的,X岁的狸花猫,正在吃鱼泰迪方法体打印:一只叫做XXX的,X岁的泰迪,正在吃骨头,边吃边蹭哈士奇方法体打印:一只叫做XXX的,X岁的哈士奇,正在吃骨头,边吃边拆家测试类中定义一个方法用于饲养动物public static void keepPet(ArrayList<???> list){//遍历集合,调用动物的eat方法}要求1:该方法能养所有品种的猫,但是不能养狗要求2:该方法能养所有品种的狗,但是不能养猫要求3:该方法能养所有的动物,但是不能传递其他类型*/ArrayList<lihuaCat> list1 = new ArrayList<>();ArrayList<hashiqiDog> list2 = new ArrayList<>();//        keepPet(List1);
//        keepPet(List2);}//该方法能养所有的动物,但是不能传递其他类型public static void keepPet(ArrayList<? extends Animal> list){//遍历集合,调用动物的eat方法}/*  //  要求2:该方法能养所有品种的狗,但是不能养猫public static void keepPet(ArrayList<? extends Dog> list){//遍历集合,调用动物的eat方法}*//*//要求1:该方法能养所有品种的猫,但是不能养狗public static void keepPet(ArrayList<? extends Cat> list){//遍历集合,调用动物的eat方法}*/}

爷 类:Animal

package Test;public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public abstract void eat();public String toString() {return "Animal{name = " + name + ", age = " + age + "}";}
}

父类:Cat

package Test;public abstract class Cat extends Animal{}

子类:bosiCat

package Test;public class bosiCat extends Cat{@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的" + getAge() + "岁的波斯猫,正在吃小饼干");}
}

子类:lihuaCat

package Test;public class lihuaCat extends Cat{@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的" + getAge() + "岁的狸花猫,正在吃小鱼干");}
}

父类:Dog

package Test;public abstract class Dog extends Animal{}

子类:taidiDog

package Test;public class taidiDog extends Dog{@Overridepublic void eat() {System.out.println("一只叫做" + getName() +"的" + getAge()+"岁的泰迪,正在吃骨头,边吃边蹭");}
}

子类:hashiqiDog

package Test;public class hashiqiDog extends Dog{@Overridepublic void eat() {System.out.println("一只叫做" + getName() +"的" + getAge()+"岁的哈士奇,正在吃骨头,边吃边蹭");}
}

总结

1.什么是泛型?

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

2.泛型的好处?

  • 统一数据类型

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

3.泛型的细节?

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

  • 可以传入该类型和他的子类类型指定泛型的具体类型后,传递数据时,

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

4.哪里定义泛型?

  • 泛型类:在类名后面定义泛型,创建该类对象的时候,确定类型
  • 泛型方法:在修饰符后面定义方法,调用该方法的时候,确定类型
  • 泛型接口:在接口名后面定义泛型实现类确定类型,实现类延续泛型

5.泛型的继承和通配符

  • 泛型不具备继承性但是数据具备继承性

  • 泛型的通配符:?

    ? extend E

    ? super E

6.使用场景

  • 定义类、方法、接口的时候,如果类型不确定,就可以定义泛型
  • 如果类型不确定,但是能知道是哪个继承体系中的,可以使用泛型的通配符

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

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

相关文章

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(七)- 向量算术指令格式

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

Mysql底层原理六:InnoDB 数据页结构

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1&#xff09;建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…

怎么将静图变成gif?告诉你三步快速制作

想要将jpg格式的静图变成gif格式的动图时要怎么操作呢&#xff1f;在这个飞速发展的数字媒体时代&#xff0c;经常会在网络上分享有趣的动态图片。当我们想要将自己手中的jpg图片变成gif动图的时候怎么实现呢&#xff1f;很简单&#xff0c;通过使用gif图片制作&#xff08;htt…

windows环境下实现ffmpeg本地视频进行rtsp推流

摘要&#xff1a;有时候服务端&#xff08;如linux&#xff09;或者边缘端&#xff08;jetson盒子&#xff09;需要接受摄像头的视频流输入&#xff0c;而摄像头的输入视频流一般为rtsp&#xff0c;测试时需要搭建摄像头环境&#xff0c;很不方便&#xff0c;因此需要对本地视频…

YOLOV8注意力改进方法:DoubleAttention(附代码)

原论文地址&#xff1a;原论文地址 DoubleAttention网络结构的优点在于&#xff0c;它能够有效地捕获图像中不同位置和不同特征的重要性&#xff0c;从而提高了图像识别和分割的性能。 论文相关内容介绍&#xff1a; 论文摘要&#xff1a;学习捕捉远程关系是图像/视频识别的…

springboot系列-api接口请求实现

springboot HTTP请求接口实现 基于springboot 2.6.6 代码地址&#xff1a;github仓库地址 更多系列教程请关注公众号’coderlike’ 如果觉得有帮助希望能关注下公众号 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…

Elasticsearch索引之嵌套类型:深度剖析与实战应用

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! Elasticsearch是一个基于Lucene的搜索服务器&#xff0c;它提供了一个分布式、多租户能力的全文搜索引擎&#xff0c;并带有一个基…

烧坏两块单片机,不知道原因?

没有看你的原理图&#xff0c;以下是造成烧毁芯片的几个环节&#xff1a; 1. 最大的可能性是你的单片机电机控制输出与电机驱动电路没有隔离。 我的经验&#xff0c;使用STM32控制电机&#xff0c;无论是直流电机脉宽调制&#xff0c;还是步进电机控制&#xff0c;控制电路与…

PCA算法(Principal Component Analysis)揭秘

经典PCA算法 PCA算法的应用包括降维、有损数据压缩、特征抽取、数据可视化等。目前PCA算法有两个通用定义&#xff0c;能殊途同归&#xff0c;得到相同的结果。一方面&#xff0c;我们可以用正交投影来定义PCA&#xff0c;即将数据投影到更低维的线性子空间&#xff0c;也被称…

DolphinScheduler 答案整理,最新面试题

DolphinScheduler的架构设计是怎样的&#xff1f; DolphinScheduler的架构设计主要分为四个层次&#xff1a;前端界面层、API服务层、调度层和执行层。 1、前端界面层&#xff1a; 提供任务的定义、流程的设计、监控等功能&#xff0c;用户通过前端界面操作整个系统。 2、AP…

“揭秘循环购模式:快消品行业复购利器

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发与商业模式设计的公司。我们的核心业务是构建商城系统&#xff0c;并为各企业提供全方位的商业模式解决方案。至今&#xff0c;我们已经成功打造了超过两百种独特的商业模式&#xff0c;助力众多企业实现商业目标…

C++的并发世界(九)——条件变量

0.绪论——单例模型 单例设计模式是一种常见的设计模式&#xff0c;用于确保某个类只能创建一个实例。由于单例实例是全局唯一的。因此在多线程环境中使用单例模式时,需要考虑线程安全的问题。 1.消费者设计模式 2.condition_variable使用步骤 ①准备好信号量 std::conditio…

Linux系统Docker部署Apache Superset并实现公网实时访问本地数据

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

电商API接口告诉你中国跨境电商何以“一路繁花”?

3月31日&#xff0c;启程跨境华东中心仓突破单日自营订单5000单&#xff0c;刷新连云港市跨境进口单日纪录。一季度&#xff0c;连云港市纳入“点点通”公共服务平台统计的跨境电商交易额达2.06亿元&#xff0c;同比增长77.03%。 连云港的“景象”只是中国跨境电商业态蓬勃发展…

管廊ar实景可视化巡检提升安全性

在科技日新月异的今天&#xff0c;智慧工地ar远程巡检交互系统应运而生&#xff0c;它是ar开发公司深圳华锐视点综合运用了AR增强现实、5G通信、人工智能、物联网以及GPS北斗定位等前沿技术&#xff0c;为企业打造了一套全新的数字化巡检解决方案。不仅解放了巡检人员的双手&am…

揭秘IP地理位置:从技术原理到隐私考量

在当今数字化的世界中&#xff0c;IP 地理位置已成为网络定位、广告定向和安全控制等领域的重要工具。然而&#xff0c;对于大多数人来说&#xff0c;IP 地理位置的工作原理以及与隐私之间的关系可能还有些模糊。本文将深入探讨 IP 地理位置的技术原理&#xff0c;以及与隐私相…

Vulnhub:MHZ_CXF: C1F

目录 信息收集 arp-scan nmap nikto WEB web信息收集 dirmap gobuster ssh登录 提权 获得初始立足点 系统信息收集 横向渗透 提权 信息收集 arp-scan ┌──(root㉿ru)-[~/桌面] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:…

2024Spring> HNU-计算机系统-实验2-datalab-导引

前言 datalab考验对于位运算以及浮点数存储的理解&#xff0c;如果真的肯花时间去搞懂&#xff0c;对计算机系统存储的理解真的能上一个台阶。与课程考试关联性上来说不是很大&#xff0c;但对于IEEE的浮点数表示一定要熟练掌握。 导引 ①实验工具包 要完成的是bits.c中的15个…

解决arcgis发布服务时报错:要素服务需要一个已注册的数据库

发布服务时发生以下报错&#xff1a; 双击列表中的报错项&#xff0c;在弹出的窗口中点击【已注册的数据库】后边的添加按钮&#xff0c;设置注册数据库的名称 点击添加按钮&#xff0c;配置数据库的基本信息&#xff08;注意&#xff1a;这里配置的数据库连接需要与连接sde数据…

Linux使用宝塔面板部署Discuz结合内网穿透实现公网访问本地论坛

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…