位置: IT常识 - 正文

day28--Java泛型01

编辑:rootadmin
Java泛型01 1.泛型的理解和好处 看一个需求: 请编写程序,在ArrayList中添加三个Dog对象 Dog对象含有name和age,并输出name和age(要求使用getXXX()) 先用传统的方法来解决 >引出泛型 传统的方法: package li.generic; import jav ... Java泛型011.泛型的理解和好处

推荐整理分享day28--Java泛型01,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

看一个需求:

请编写程序,在ArrayList中添加三个Dog对象Dog对象含有name和age,并输出name和age(要求使用getXXX())

先用传统的方法来解决--->引出泛型

传统的方法:

package li.generic;import java.util.ArrayList;@SuppressWarnings("all")public class Introduce_ { public static void main(String[] args) { //用传统的方法来解决 ArrayList arrayList = new ArrayList(); arrayList.add(new Dog("旺财",10)); arrayList.add(new Dog("发财",1)); arrayList.add(new Dog("小黄",5)); for (Object o:arrayList) { //向下转型 Dog dog = (Dog) o; System.out.println(dog.getName()+"-"+dog.getAge()); } }}class Dog { private String name; private int age; public Dog(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}//假设,我们的程序员不小心添加了一只猫arrayList.add(new Cat("招财猫",8));

那么 在使用增强for循环输出的时候向下转型时就会抛出异常:类型转换错误

使用传统方法问题的分析:

不能对加入到集合ArrayList中的数据进行约束(不安全)遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响

使用泛型来解决问题:

package li.generic;import java.util.ArrayList;@SuppressWarnings("all")public class Introduce_ { public static void main(String[] args) { //使用泛型 // 1. 当我们这样写的时候:ArrayList<Dog> 表示集合ArrayList中的元素是Dog类型 // 2. 如果编译器发现添加的类型不满足要求,就会报错 // 3.在遍历的时候,可以直接取出Dog类型而不是Object ArrayList<Dog> arrayList = new ArrayList<Dog>(); arrayList.add(new Dog("旺财",10)); arrayList.add(new Dog("发财",1)); arrayList.add(new Dog("小黄",5)); //假设,我们的程序员不小心添加了一只猫,就会报错 // arrayList.add(new Cat("招财猫",8)); System.out.println("====使用泛型===="); for (Dog dog:arrayList) { System.out.println(dog.getName()+"-"+dog.getAge()); } }}class Dog { private String name; private int age; public Dog(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}class Cat { private String name; private int age; public Cat(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}package li.generic;import java.util.ArrayList;@SuppressWarnings("all")public class Introduce_ { public static void main(String[] args) { //使用泛型 // 1. 当我们这样写的时候:ArrayList<Dog> 表示集合ArrayList中的元素是Dog类型 // 2. 如果编译器发现添加的类型不满足要求,就会报错 // 3.在遍历的时候,可以直接取出Dog类型,而不是Object ArrayList<Dog> arrayList = new ArrayList<Dog>(); arrayList.add(new Dog("旺财",10)); arrayList.add(new Dog("发财",1)); arrayList.add(new Dog("小黄",5)); //假设,我们的程序员不小心添加了一只猫,就会报错 // arrayList.add(new Cat("招财猫",8)); System.out.println("====使用泛型===="); for (Dog dog:arrayList) { System.out.println(dog.getName()+"-"+dog.getAge()); } }}class Dog { private String name; private int age; public Dog(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}class Cat { private String name; private int age; public Cat(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}day28--Java泛型01

泛型的好处:

编译时,检查添加元素的类型,提高了安全型

减少了类型转换的次数,提高效率

如上面例子所示:不使用泛型的时候,Dog对象放到ArrayList里会先转成Object类型,在取出的时候还要再转换成Dog类型(Dog--加入-->Object--取出-->Dog)

使用了泛型,则放入和取出时都不需要类型转换,提高效率(Dog-->-Dog-->Dog)

不再提示编译警告

不添加@SuppressWarnings("all")编译器也不再警告

2.泛型介绍

泛型是一种可以表示数据类型的 数据类型

如下图:public class ArrayList<E>{} E 称为泛型

泛(广泛)型(类型)===>integer,String,Dog,……

泛型又称参数化类型,是jdk5.0出现的新特性,解决数据类型的安全性问题在类
本文链接地址:https://www.jiuchutong.com/zhishi/310431.html 转载请保留说明!

上一篇:phpcms后台登录验证码显示不出来(phpcms v9用户手册)

下一篇:为dedecms织梦模板发布文章添加禁用词语过滤功能(织梦使用教程)

  • WPS怎么添加目录(wps怎么添加目录项)

    WPS怎么添加目录(wps怎么添加目录项)

  • 微信号怎么解除手机号绑定(微信号怎么解除手机号不绑定新的手机号)

    微信号怎么解除手机号绑定(微信号怎么解除手机号不绑定新的手机号)

  • ddr4双通道有必要吗(ddr 双通道)

    ddr4双通道有必要吗(ddr 双通道)

  • PPT文件播放提示媒体不可用

    PPT文件播放提示媒体不可用

  • 苹果11忘记锁屏密码怎么办(苹果11忘记锁屏密码停用了怎么办法)

    苹果11忘记锁屏密码怎么办(苹果11忘记锁屏密码停用了怎么办法)

  • qq能录屏吗(qq可以录屏么)

    qq能录屏吗(qq可以录屏么)

  • 荣耀30pro耳机在哪里(荣耀30pro+ 耳机)

    荣耀30pro耳机在哪里(荣耀30pro+ 耳机)

  • 手机进水一直显示耳机模式怎么回事(手机进水一直显示耳机状态怎么办)

    手机进水一直显示耳机模式怎么回事(手机进水一直显示耳机状态怎么办)

  • 荣耀x10有nfc吗(荣耀x10手机有nfc功能么)

    荣耀x10有nfc吗(荣耀x10手机有nfc功能么)

  • 5e是几类网线(6类网线和5类网线的区别)

    5e是几类网线(6类网线和5类网线的区别)

  • 电脑图标有个白色框(电脑图标有个白框阴影)

    电脑图标有个白色框(电脑图标有个白框阴影)

  • 荣耀平板5和华为畅享区别(荣耀平板5和华为平板m5青春版有什么区别)

    荣耀平板5和华为畅享区别(荣耀平板5和华为平板m5青春版有什么区别)

  • 5g频段的wifi真的无法穿墙吗(5g 频段 wifi)

    5g频段的wifi真的无法穿墙吗(5g 频段 wifi)

  • 爱奇艺买片是永久的吗(爱奇艺中购买影片后可以维持多久)

    爱奇艺买片是永久的吗(爱奇艺中购买影片后可以维持多久)

  • 手机怎样压缩文件打包(手机怎样压缩文件到最小)

    手机怎样压缩文件打包(手机怎样压缩文件到最小)

  • 二极管在电路中的作用是什么(二极管在电路中相当于导线吗)

    二极管在电路中的作用是什么(二极管在电路中相当于导线吗)

  • 交换机种类和用途是什么(交换机有几种?)

    交换机种类和用途是什么(交换机有几种?)

  • 华为jkmtl00型号是啥(华为jkmtl00型号手机照片删除后找回)

    华为jkmtl00型号是啥(华为jkmtl00型号手机照片删除后找回)

  • 摄像头1080p和4mp区别(摄像头1080p和5mp有什么区别)

    摄像头1080p和4mp区别(摄像头1080p和5mp有什么区别)

  • iphone11怎么结束程序(苹果11怎么结束运行的程序)

    iphone11怎么结束程序(苹果11怎么结束运行的程序)

  • 百万猜歌能提现吗(百万猜歌50元红包能提现是真的吗)

    百万猜歌能提现吗(百万猜歌50元红包能提现是真的吗)

  • 掌通家园可以回放吗(掌通家园可以回看吗)

    掌通家园可以回放吗(掌通家园可以回看吗)

  • 比心怎么取消订单(比心取消订单会有什么后果)

    比心怎么取消订单(比心取消订单会有什么后果)

  • 大疆air遥控器怎么充电(大疆air 遥控器)

    大疆air遥控器怎么充电(大疆air 遥控器)

  • 微信如何查询建群时间(微信如何查询建设卡余额)

    微信如何查询建群时间(微信如何查询建设卡余额)

  • 华为手机的指纹设置在哪里(华为手机的指纹传感器在哪里)

    华为手机的指纹设置在哪里(华为手机的指纹传感器在哪里)

  • Kicad学习笔记1:KLC:Kicad库公约(kicad liberary convertion)(kicad视频教程 百度网盘)

    Kicad学习笔记1:KLC:Kicad库公约(kicad liberary convertion)(kicad视频教程 百度网盘)

  • Vue实现角色权限动态路由详细教程,在vue-admin-template基础上修改,附免费完整项目代码(vue角色管理)

    Vue实现角色权限动态路由详细教程,在vue-admin-template基础上修改,附免费完整项目代码(vue角色管理)

  • 中税协是什么意思
  • 企业所得税人数包括劳务派遣吗
  • 一般纳税人财务要求
  • 锐捷财税怎么样
  • 增值税普通发票和电子普通发票的区别
  • 不良资产处置措施
  • 如何开银行卡账户
  • 超市小票能否入库
  • 两处工资薪金所得
  • 税务师工作年限是从毕业当天开始计算吗
  • 租赁合同印花税率
  • 账载金额和实际金额的区别
  • 所得税忘了计提如何做会计分录还有结转
  • 施工排水费是否属于措施费
  • 报销职工住院费多久到账
  • 销售自己使用过的物品免税吗
  • 房产税从租计征的税率是12%还是4%
  • 固定资产计提折旧的原则
  • 缴纳地方教育附加费现金流量选什么
  • 折旧方法改变属于会计政策变更还是估计变更
  • 农产品收购发票可以跨区域开吗
  • 营改增后不动产销售增值税 5%还是9%
  • 农产品收购发票图片
  • 公司员工租金取得专用发票能否抵扣?
  • 总公司出货分公司怎么办
  • 生产企业开具加工费发票的问题
  • 受托加工物资算资产吗
  • 非营利性组织有
  • 网店提现要多久能到账
  • 固定资产拆除后账务处理
  • 增值税逾期申报流程
  • 员工福利专票分录
  • 小规模纳税人个税怎么申报
  • 缴纳当月增值税30000元
  • macos catalina新功能
  • 360tray.exe损坏文件怎么修复
  • PHP:mb_strtolower()的用法_mbstring函数
  • 实例讲解yii2.0在php命令行中运行的步骤
  • 新企业办理地税登记流程
  • 饭店开业请客说什么
  • 投资性房地产转换日公允价值大于账面价值
  • 一般纳税人出售旧设备的税率
  • 保险税前扣除比例是多少
  • 高新技术企业补助需要交所得税吗
  • 二手房转让中转什么意思
  • 退货时可以按部分退货吗
  • thinkphp自定义标签
  • but all failed
  • yolov5结构解析
  • vue3获取dom元素的方法
  • vue获取当前行
  • 前端cgi
  • 对方代垫保险费算不算入账价值
  • 增值税进项税加计抵减
  • 收据的种类有哪些
  • 企业所得税是指哪些
  • 汇算清缴需要传票么
  • 事业单位收到退税账务处理
  • 卖二手车怎么做账务处理
  • 长期借款的账务处理会计分录
  • 自产自销免税发票可以抵税吗
  • 什么叫做差旅费
  • 会计往来账怎么用excel做更快
  • sql merge函数
  • 安装sql server需要注意什么
  • 命令行批量重命名
  • 自动登录xp系统怎么办
  • win8系统怎么到桌面
  • linux crontab用法
  • webrtc介绍
  • 批处理模式的例子
  • javascript的
  • jq获取url
  • nodejs如何运行html
  • win10的安装方式有哪些
  • java 视频教程
  • javascript new fun的执行过程
  • 残疾人交房产税有什么优惠
  • 宾馆如何申请税务发票
  • 徐州注销营业执照去哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设