java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习

文章目录

  • 泛型的深入
  • 泛型还可以在很多地方进行定义
    • 泛型类
    • 泛型方法
    • 泛型接口
  • 泛型的继承和通配符
  • 泛型类练习
  • 总结

泛型的深入

在这里插入图片描述

public static void main(String[] args) {//在没有泛型的时候怎么存储数据ArrayList list=new ArrayList();list.add(1);list.add("abc");//遍历集合Iterator iterator = list.iterator();while(iterator.hasNext()){Object o = iterator.next();//多态的弊端 不能访问子类特有的功能//o.length()就会报错//由此得出如果没有给集合限定类型那么所有类型都是object类型System.out.println(o);//打印结果1//abc}}

结论:如果我们给定集合的类型 那么所有数据类型都是object
此时可以往集合添加任何的数据类型
带来一个坏处我们获取数据的时候无法用她的特有行为
所以推出泛型
在这里插入图片描述
以上为泛型的好处

在这里插入图片描述
以上为泛型的细节

泛型还可以在很多地方进行定义

在这里插入图片描述

泛型类

在这里插入图片描述

思考:并且自己写出一个泛型类

public class myArrayList <E>{Object []obj=new Object[10];int size;//表达长度  你现在存了几个元素public boolean add(E e){obj[size]=e;//相当于现在要把元素添加到数组size++;return true;//表示添加成功}public E get(int index){return (E) obj[index];}//重写toString 要求返回对象属性值1@Overridepublic String toString() {return Arrays.toString(obj);}
}

在这里插入图片描述

泛型方法

在这里插入图片描述
在这里插入图片描述

下面是应用场景

public class ListUtil {//这是一个工具类//所以要私有化其构造方法(不让外界创建他的对象 )private  ListUtil(){}//这个工具类的作用是让集合可以添加元素//参数1是集合  参数二是参数public static <E>void addall(ArrayList<E>list,E e1,E e2,E e3,E e4){list.add(e1);list.add(e2);list.add(e3);list.add(e4);}}

在这里插入图片描述
如果泛型只需要使用一次可以不用创建在整个类下(红圈的),可以单独创建在方法里形参及方法体都可以使用

代码改写 上面的有限制只能添加四个 改写下可以添加多个

public class ListUtil {//这是一个工具类//所以要私有化其构造方法(不让外界创建他的对象 )private  ListUtil(){}//这个工具类的作用是让集合可以添加元素//参数1是集合  参数二是参数public static <E>void addall(ArrayList<E>list,E...e){//他的底层是一个数组//可以用普通for遍历也可以用增强forfor (E election : e) {list.add(election);}}}

在这里插入图片描述

泛型接口

在这里插入图片描述

在这里插入图片描述
1:实现类给出具体的类型.在实现的地方定义泛型类型表示就只能这个类型了


在这里插入图片描述

以上为实现类也不明确类型

泛型的继承和通配符

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

import java.util.ArrayList;public class GenericsDemo {public static void main(String[] args) {//泛型不具备继承性 但是数据具备继承性ArrayList<ye>list1 =new ArrayList<ye>();ArrayList<fu>list2=new ArrayList<fu>();ArrayList<zi>list3 =new ArrayList<zi>();method(list1);method(list2);method(list3);//这个就是泛型不具备继承性  list2 3 报错了 因为他俩是继承来的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{}

在这里插入图片描述


public class GenericsDemoTongpei {public static void main(String[] args) {//泛型不具备继承性 但是数据具备继承性ArrayList<ye> list1 =new ArrayList<ye>();ArrayList<fu>list2=new ArrayList<fu>();ArrayList<zi>list3 =new ArrayList<zi>();method(list1);method(list2);method(list3);}//这种方法不要严谨 因为它可以接收所有类//但是如果我只想限定的只接受部分类呢//这时候就用到了通配符// ? extend E表示可传递e或者e的所有的子类类型// ? super E表示传递e或者e的所有父类类型public static<E>  void method(ArrayList<E> list){}
}
class ye{}
class fu extends ye{}
class zi extends fu{}

这种方法不要严谨 因为它可以接收所有类
但是如果我只想限定的只接受部分类呢
这时候就用到了通配符
? extend E表示可传递e或者e的所有的子类类型
? super E表示传递e或者e的所有父类类型

在这里插入图片描述

泛型类练习

在这里插入图片描述

    public static void main(String[] args) {ArrayList<BosiCat>list1=new ArrayList<>();ArrayList<LihuaCat>list2=new ArrayList<>();ArrayList<TaidiDog>list3=new ArrayList<>();ArrayList<huskey>list4=new ArrayList<>();keepPet(list1);keepPet(list2);//要求1keepPet2(list3);keepPet2(list4);//要求2keepPet3(list1);keepPet3(list3);//要求3}//要求1:该方法能养所有品种的猫但不能养狗public static void keepPet(ArrayList<? extends Cat>list){}//要求2:该方法能养所有品种的狗但不能养猫public static void keepPet2(ArrayList<? extends Dog>list){}//要求3:该方法能养所有动物但是不能是其他类型public static void keepPet3(ArrayList<? extends animal>list){}

总结

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

BAM(Bottleneck Attention Module)

BAM&#xff08;Bottleneck Attention Module&#xff09;是一种用于计算机视觉领域的深度学习模型结构&#xff0c;它旨在提高神经网络对图像的特征提取和感受野处理能力。BAM模块引入了通道注意力机制&#xff0c;能够自适应地加强或减弱不同通道的特征响应&#xff0c;从而提…

P5906 【模板】回滚莫队不删除莫队

这一题&#xff0c;虽说在洛谷标的是模板题&#xff0c;但可能没有“历史研究”那一题更加模板。 这一题相对于回滚莫队的模板题&#xff0c;可能在回滚的处理上稍微复杂了一点。对于回滚莫队就不多解释了&#xff0c;可以看一下 回滚莫队模板题 这一篇博客&#xff0c;稍微简单…

【数据结构】手撕单链表

目录 前言 1 链表 1.1 链表的概念及结构 1.2 链表的分类 1.2.1 单向或者双向 1.2.2 带头或者不带头 1.2.3 循环或者非循环 1.2.4 无头单向非循环链表 1.2.5 带头双向循环链表 2 链表的实现 2.1 结构 2.2 结点的创建 2.3 尾插 2.4 头插 2.5 尾删 2.6 头删 2.7 …

「随笔」浅谈2023年云计算的发展趋势

在2023年&#xff0c;云计算的发展趋势将受到政治、经济、社会和科技四个维度的影响。以下是对这些维度的具体分析&#xff1a; 1.1 政治维度&#xff1a; 全球政策推动&#xff1a; 随着全球各国政策对云计算的重视程度不断提高&#xff0c;云计算服务将获得更广泛的市场准入…

Python爬虫-获取汽车之家车家号

前言 本文是该专栏的第9篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cHM6Ly9jaGVqaWFoYW8uYXV0b2hvbWUuY29tLmNuL0F1dGhvcnMjcHZhcmVhaWQ9MjgwODEwNA== 需求:获取汽车之家车家号数据 笔者将在正文中介绍详细的思路以及采集方法,废话不多说,跟着笔者直接往…

Vite创建React项目,另外一种更加简单的方法

在上一篇blog中一个一个安装依赖dependencies&#xff0c;有没有一步到位的方法呢&#xff0c;有! 参考《React 18 Design Patterns and Best Practices Design, build, and deploy production-ready web applications with React》4th 第一章倒数第二节Vite as a solution有个…

如何实现单病种上报的多院区/集团化/平台联动管理

背 景 米软售前人员在了解客户单病种上报的相关需求中发现&#xff0c;部分医院分为本部、分部或总院、分院等多个院区&#xff0c;各院区需共用一套系统&#xff1b;部分医院与其他兄弟医院隶属于同一集团医院&#xff0c;全集团需统一部署&#xff1b;部分市/区卫健委要求全…

休闲玩具的软文营销策略

休闲玩具行业作为新兴市场&#xff0c;具有广阔的发展前景&#xff0c;生活水平的提高带来消费观念的升级&#xff0c;城市化进程加速导致人们对休闲娱乐的需求持续上涨&#xff0c;玩具作为娱乐性、放松性、互动性的产品受到广大群体喜爱&#xff0c;休闲玩具市场的竞争也愈发…

视频特效编辑软件 After Effects 2022 mac中文版介绍 (ae 2022)

After Effects 2022 mac是一款视频特效编辑软件&#xff0c;被称为AE&#xff0c;拥有强大的特效工具&#xff0c;旋转&#xff0c;用于2D和3D合成、动画制作和视觉特效等&#xff0c;效果创建电影级影片字幕、片头和过渡&#xff0c;是一款可以帮助您高效且精确地创建无数种引…

js处理赎金信

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; 输入&…

Javascript知识点详解:对象、New命令、Object对象的相关方法

目录 对象 对象是什么 构造函数 new 命令 基本用法 new 命令的原理 new.target Object.create() 创建实例对象 Object 对象的相关方法 Object.getPrototypeOf() Object.setPrototypeOf() Object.create() Object.prototype.isPrototypeOf() Object.prototype.__p…

Ubuntu18.04安装pcl-1.12.1,make时报错:/usr/bin/ld: cannot find -lvtkIOMPIImage

解决方案&#xff1a; 在vtk安装包中&#xff0c;重新打开cmake-gui&#xff0c;然后勾选上VTK_Group_MPI和VTK_Group_Imaging。 cd VTK-8.2.0 cd build cmake-gui然后重新编译生成。 make -j8 # 或者j4,量力而行。 sudo make install 就可以解决了。 然后重新回到pcl安装…