网易首页 > 网易号 > 正文 申请入驻

Java培训:Java泛型集合

0
分享至

谓泛型就是允许在定义类、接口时指定类型形参,这个类型形参将在声明变量、创建对象时确定。增加了泛型支持后的集合,完全可以记住集合中元素的类型,并可以在编译时检查集合中元素的类型。即解决一些安全问题,同时还可以让代码变得更加简洁。

1.使用泛型

泛型的格式:通过<>来定义要操作的引用数据类型

创建一个只存放字符串的对象,代码如下:

package com.csu.test1;import java.util.ArrayList;import java.util.List;public class GenericDemo {public static void main(String[] args) { //创建一个只能保存字符串的ArrayList集合 List

strList=new ArrayList

(); //如果存放其他类型的对象时会出现编译错误 strList.add("chaofn"); System.out.println(strList);}}

使用泛型的好处:

(1)将运行时期出现的ClassCastExcpetion , 转移到了编译时期。方便于程序员解决问题,让运行时期问题减少。

(2)避免了强制转换的麻烦。

如下代码可以解释这一点:

package com.csu.test1;import java.util.ArrayList;import java.util.Iterator;import java.util.List; class StringDemo { String name; public StringDemo(String name){ this.name=name; } }public class GenericDemo {public static void main(String[] args) { //创建一个只能保存字符串的ArrayList集合 List ls=new ArrayList(); //如果存放其他类型的对象时会出现编译错误 ls.add(new StringDemo("chaofn01")); ls.add(new StringDemo("chaofn02")); ls.add(new StringDemo("chaofn03")); ls.add(new StringDemo("chaofn04")); ls.add(1000); MyIterator(ls); }public static void MyIterator(List ls){ Iterator it=ls.iterator(); while(it.hasNext()){ StringDemo s=(StringDemo) it.next(); System.out.println(s.name); }}}

运行结果:

chaofn01chaofn02Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to com.csu.test1.StringDemo at com.csu.test1.GenericDemo.MyIterator(GenericDemo.java:34) at com.csu.test1.GenericDemo.main(GenericDemo.java:27)chaofn03chaofn04

在调用MyIterator(List ls) 方法时会发生ClassCastException 异常。而且在编译时是不会有任何提示,只有运行时会出现,所以使的程序存在安全隐患。

如果使用泛型则会在编译时提示错误,而且在遍历时不需要强制转换。如:

import java.util.ArrayList;import java.util.Iterator;import java.util.List; class StringDemo { String name; public StringDemo(String name){ this.name=name; } }public class GenericDemo { public static void main(String[] args) { //创建一个只能保存字符串的ArrayList集合 List

ls=new ArrayList

(); //如果存放其他类型的对象时会出现编译错误 ls.add(new StringDemo("chaofn01")); ls.add(new StringDemo("chaofn02")); ls.add(new StringDemo("chaofn03")); ls.add(new StringDemo("chaofn04")); //下面一行代码在编译时会出错 //ls.add(1000); MyIterator(ls); }public static void MyIterator(List){ Iterator

ls

it=ls.iterator(); while(it.hasNext()){ //不需要强制转化成StringDemo StringDemo s= it.next(); System.out.println(s.name); }}}

2.自定义泛型类:

除了Java提供了一些类增加了泛型支持外,我们可以自定义泛型支持类。

那么在什么时候定义泛型类呢?

当类中操作的引用数据类型不确定时可以定义泛型类。

格式如下:

class Tools

}例如:定义一个Tools 类 用来完成打印操作,但是应为不知道要操作的数据类型是什么,所以可以定义成泛型类。具体操作:

//定义一个工具类Tools //因为不知道要操作的类型是什么所以增加泛型支持 class Tools // 包含输出函数: public void sop(T t) { System.out.println("sop:"+t); } } //定义一个Books 类 class Books { private String name ; public Books(String name) { this.name = name ; } // 重写toString 方法 public String toString() { return "name = " + name ; } } public class GenericText { public static void main(String[] args) { // 创建一个Tools 实例tool ,定义 tool 要操作的数据类型为Books Tools

tool = new Tools

() ; // tool 可以操作 Books 类型,还可以操作Integer 类型和String类型。 tool.sop(new Books("神雕侠侣")); } }

泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。为了让不同方法可以操作不同类型,

而且类型还不确定,那么可以将泛型定义在方法上。

3.自定义泛型方法

定义泛型方法格式如下:

public void show(T t) 注意:<>放在修饰符后面,返回值前面

//定义一个工具类Tools //因为不知道要操作的类型是什么所增加泛型支持 class Tools // 包含输出函数: public void sop(T t) { System.out.println("sop:"+t); } // 定义的泛型方法: public

void show (T t) { System.out.println("show:"+t); } } //定义一个Books 类 class Books { private String name ; public Books(String name) { this.name = name ; } // 重写toString 方法 public String toString() { return "name = " + name ; } } public class GenericText { public static void main(String[] args) { // 创建一个Tools 实例tool ,定义 tool 要操作的数据类型为Books Tools

tool = new Tools

() ; // tool 可以操作 Books 类型,还可以操作Integer 类型和String类型。 tool.sop(new Books("神雕侠侣")); tool.show(new Books("神雕侠侣")) ; // 下面的方法编译时会报错》、: tool.sop(1000) ; tool.sop("String") ; // 但下面却不会报错,并且正常运行。 tool.show(1000) ; tool.show("String") ; } }

以上就是动力节点小编介绍的"Java泛型集合",希望对大家有帮助。

动力节点Java培训:http://www.bjpowernode.com/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
58岁周涛看彭冠英的眼神火了:端庄了一辈子,遇到帅哥也绷不住

58岁周涛看彭冠英的眼神火了:端庄了一辈子,遇到帅哥也绷不住

陈意小可爱
2026-07-02 03:07:25
齐达内儿子被梅西打穿后,情绪一度崩溃,淘汰赛重回赛场,比赛50分钟内又被灌进2球

齐达内儿子被梅西打穿后,情绪一度崩溃,淘汰赛重回赛场,比赛50分钟内又被灌进2球

极目新闻
2026-07-03 12:58:07
特斯拉发布新款 Model YL,居然还送 FSD + 免费超充!

特斯拉发布新款 Model YL,居然还送 FSD + 免费超充!

XCiOS俱乐部
2026-07-03 19:42:20
失踪近一年后,美国一实验室员工被曝曾参与量子物理项目:让物质“同时存在于两个地方”

失踪近一年后,美国一实验室员工被曝曾参与量子物理项目:让物质“同时存在于两个地方”

红星新闻
2026-07-03 14:00:10
男篮惨败日本一人背大锅!7中1+空篮不进,球迷:打不了现代篮球

男篮惨败日本一人背大锅!7中1+空篮不进,球迷:打不了现代篮球

弄月公子
2026-07-03 23:30:03
钱学森教授唯一的孙子钱磊:2009年30岁少校,2017年38岁上校

钱学森教授唯一的孙子钱磊:2009年30岁少校,2017年38岁上校

史之铭
2026-06-20 02:12:13
齐达内力挺马丁内斯换下C罗:世界杯不容迟疑,变阵是取胜关键

齐达内力挺马丁内斯换下C罗:世界杯不容迟疑,变阵是取胜关键

星耀国际足坛
2026-07-03 21:00:02
离谱!阿森纳王牌世界杯摆烂!半场心态崩盘直接放弃比赛

离谱!阿森纳王牌世界杯摆烂!半场心态崩盘直接放弃比赛

澜归序
2026-07-03 16:45:04
乌克兰击中俄第四大炼油厂:卢克石油核心装置损毁后全面停产

乌克兰击中俄第四大炼油厂:卢克石油核心装置损毁后全面停产

桂系007
2026-07-04 05:42:46
梅西又进球了!世界杯第20球、连续8场破门,更可怕的是这6项纪录

梅西又进球了!世界杯第20球、连续8场破门,更可怕的是这6项纪录

呀古铜
2026-07-04 07:26:16
脸都不要了?中国男篮输日本近20分,杨瀚森空篮三不沾被球迷狂喷

脸都不要了?中国男篮输日本近20分,杨瀚森空篮三不沾被球迷狂喷

听我说球
2026-07-03 21:39:51
荷兰政府花200亿挽留无效,光刻机巨头ASML为啥执意从老家搬走?

荷兰政府花200亿挽留无效,光刻机巨头ASML为啥执意从老家搬走?

花小猫的美食日常
2026-07-04 01:02:22
中国男篮不敌日本,建议立刻征召4大王牌,杨鸣一针见血

中国男篮不敌日本,建议立刻征召4大王牌,杨鸣一针见血

晚雾空青
2026-07-04 05:53:01
将帅不和!韩媒:韩国输墨西哥赛后,洪明甫在更衣室训斥了孙兴慜

将帅不和!韩媒:韩国输墨西哥赛后,洪明甫在更衣室训斥了孙兴慜

砚底沉香
2026-07-03 16:11:32
西安赛格事件!网友一语惊醒:看严总代理的品牌归谁,就有答案了

西安赛格事件!网友一语惊醒:看严总代理的品牌归谁,就有答案了

火山詩话
2026-07-03 07:47:39
历史第1人!梅西世界杯出场30次创纪录 佛得角队长涉嫌强奸仍首发

历史第1人!梅西世界杯出场30次创纪录 佛得角队长涉嫌强奸仍首发

风过乡
2026-07-04 05:51:03
新加坡曝3.9亿AI芯片特大走私案:查封$5600万豪宅、一中国人涉案

新加坡曝3.9亿AI芯片特大走私案:查封$5600万豪宅、一中国人涉案

新加坡万事通
2026-07-03 19:37:27
中央再发铁令!领导干部出现这15种情形 , 将不能再担任现职!

中央再发铁令!领导干部出现这15种情形 , 将不能再担任现职!

细说职场
2026-07-03 18:18:55
死亡人数破千!欧洲正式摊牌,宁可社会崩溃也不让中国办成一件事

死亡人数破千!欧洲正式摊牌,宁可社会崩溃也不让中国办成一件事

比利
2026-07-04 04:33:41
世界杯打服曼联!红魔放弃新星天才!砸 4500 万抢 28 岁飞翼

世界杯打服曼联!红魔放弃新星天才!砸 4500 万抢 28 岁飞翼

澜归序
2026-07-04 05:30:48
2026-07-04 07:59:00
动力节点Java培训
动力节点Java培训
动力节点专注Java培训事业
1367文章数 36关注度
往期回顾 全部

科技要闻

万亿富豪马斯克 舍不得特斯拉员工敞开用AI

头条要闻

巴黎副市长:天气越热水质越好 因为阳光起到杀菌作用

头条要闻

巴黎副市长:天气越热水质越好 因为阳光起到杀菌作用

体育要闻

C罗穿已故队友若塔球衣谢场 眼中含泪

娱乐要闻

海来阿木孕期出轨指控掀起全网热议

财经要闻

千亿茶市场无赢家:澜沧巨亏 八马停"蹄"

汽车要闻

方程豹钛9内饰曝光 用上了长联屏设计/下半年上市

态度原创

本地
房产
教育
健康
公开课

本地新闻

国内足球之旅?这座小城给你高分答案

房产要闻

总裁空缺17个月、现金缺口超1000亿:金融局“局外人”入局万科

教育要闻

分期销售问题,一个视频学透彻!

听说少吃点能抗衰老?专家讲解!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版