




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA之旅(二十一)一.泛型的概述什么是泛型,我们可以用一个很典型的例子来说明package com.lgl.hellojava;import java.util.ArrayList;import java.util.Iterator;/公共的 类 类名public class HelloJJAVA public static void main(String args) /* * 泛型 */ ArrayList al = new ArrayList(); al.add(hello 1); al.add(hello 02); al.add(hello 0300); al.add(hello 084); /添加int al.add(5); Iterator iterator = al.iterator(); while (iterator.hasNext() String s = (String) iterator.next(); / 打印长度 sop(s.length(); / 输出 public static void sop(Object obj) System.out.println(obj); 这里,我们用一个arraylist存储的数据有String也有int,输出的结果不会发现,他报的就是类型的异常,我们要怎么去解决?这里就牵扯出泛型来了泛型:JDK1.5版本之后出现的新特性,用于解决安全问题,是一个安全机制;我们要怎么使用?ArrayList al = new ArrayList();我定义了一个容器,容器的参数是String类型,规范了数据类型,就不能存其他的数据了,安全性提高了!好处:讲运行时期出现的问题转移到了编译时期,方便程序员解决问题,让运行时期问题减少,安全二.泛型的使用泛型的格式:通过来定义要操作的引用数据类型,在使用JAVA提供的对象时,什么时候写泛型呢,通常在集合框架中很常见,只要见到就是定义泛型!其实就是用来接收类型的,当使用集合时,将集合中要存储的数据类型,作为参数,传递到一样 ,我们来个小例子package com.lgl.hellojava;import java.util.Comparator;import java.util.Iterator;import java.util.TreeSet;/公共的 类 类名public class HelloJJAVA public static void main(String args) TreeSet tr = new TreeSet(new LenComp(); tr.add(hello 01); tr.add(hello 012); tr.add(hello 013); tr.add(hello 014); Iterator iterator = tr.iterator(); while (iterator.hasNext() String string = iterator.next(); sop(string); / 输出 public static void sop(Object obj) System.out.println(obj); / 比较器class LenComp implements Comparator Override public int compare(String o1, String o2) String s1 = o1; int num = new Integer(o1.length().compareTo(new Integer(o2.length(); if (num = 0) return pareTo(o2); return num; 你可以仔细的看看里面是怎么用泛型的,就是一些小技巧三.泛型类这是我们优化代码比较常见的一种方式,我们可以看这块代码package com.lgl.hellojava;/公共的 类 类名public class HelloJJAVA public static void main(String args) Tool t = new Tool(); t.setW(new Worker(); t.getW(); / 输出 public static void sop(Object obj) System.out.println(obj); /操作工人的工具类class Tool private Worker w; public Worker getW() return w; public void setW(Worker w) this.w = w; class Worker 这里,有一个工人的类,我们定义一个工具类去操作,对吧,这个逻辑就是这么的简单,但是你回发现,如果我在定义一个学生的类,就又得需要一个学生的工具类了,我们为什么不去合并这个工具类,抽调共有的方法呢?你会说可以用Object?/操作工人的工具类class Tool private Object obj; public Object getObj() return obj; public void setObj(Object obj) this.obj = obj; 这样的话,你如果传递的话,还是要定义床底类型,不然会报类型异常的,我们泛型的用法class Utils private T t; public T getT() return t; public void setT(T t) this.t = t; 由你来指定传递进来的参数,这样就可以为所欲为了什么时候定义泛型类 当类中要操作的引用数据类型不确定的时候,早起定义Object来完成扩展,现在定义泛型来完成扩展四.泛型方法泛型除了定义在类中,还是可以定义在方法上的,我们来看一下package com.lgl.hellojava;/公共的 类 类名public class HelloJJAVA public static void main(String args) Demo d = new Demo(); d.show(hh); d.print(aa); class Demo public void show(T t) System.out.println(show: + t); public void print(T t) System.out.println(print: + t); 泛型类定义的泛型,在整个类中有效,如果被方面使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。为了让不同的方法可以操作不同的类型,而且类型不确定,那么可以将泛型定义在方法上仔细看class Demo public void show(T t) public void print(T t) 这样就可以传递泛型参数了五.静态泛型方法这个倒不是什么大知识点,就是注意一下,泛型方法不能使用静态的,也可以说静态方法不可以访问类上定义的泛型,如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上,就可以了class Demo public void show(T t) public void print(T t) public static void method(T t) 要放在static后面哦!六.泛型接口你类和方法都有了,怎么能少得了接口呢?package com.lgl.hellojava;/公共的 类 类名public class HelloJJAVA public static void main(String args) InterImpl i = new InterImpl(); ow(55); class InterImpl implements Inter Override public void show(T t) System.out.println(show: + t); interface Inter void show(T t);结构也差不多,传参数就行,但是这种情况是不多见的七.泛型限定我们来玩玩泛型的高级用法,go 先从例子切入正题package com.lgl.hellojava;import java.util.ArrayList;import java.util.Iterator;/公共的 类 类名public class HelloJJAVA public static void main(String args) ArrayList al = new ArrayList(); al.add(hello 01); al.add(hello 02); al.add(hello 03); al.add(hello 04); ArrayList all = new ArrayList(); all.add(9); all.add(596); all.add(98); all.add(97); printColl(all); /内容不明确 public static void printColl(ArrayList als) Iterator iterator = als.iterator(); while (iterator.hasNext() System.out.println(iterator.next(); 问号是占位符,上面的逻辑就是我们有两个arrayList,但是我们需要公用一个方法,内容不明确,所以用问号占位,其实实现的方式还有很多种,还有一种需求使用不到?的,因为?是打印任何的数据,但是我只需要打印限定的几种类型,这个时候该怎么做?package com.lgl.hellojava;import java.util.ArrayList;import java.util.Iterator;/公共的 类 类名public class HelloJJAVA public static void main(String args) ArrayList al = new ArrayList(); al.add(new Person(zhangsan); al.add(new Person(lisi); al.add(new Person(wangwu); ArrayList al1 = new ArrayList(); al1.add(new Student(zhangsan - 1); al1.add(new Student(lisi - 2); al1.add(new Student(wangwu - 3); / ArrayList printColl(al1); / 内容不明确 public static void printColl(ArrayList als) Iterator iterator = als.iterator(); while (sNext() System.out.println(iterator.next().getName(); class Person private String name; public Person(String name) = name; public String getName() return name; public vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗健康领域中的教育机器人技术探讨
- 智慧办公空间设计与舒适度研究
- 教育游戏化的设计原则与技巧
- 铁路劳动安全培训课件
- 医疗健康领域的教育政策与实效性教学策略
- 教育大数据库在智慧校园建设中的应用研究
- 技术驱动的教育变革工具选择与操作培训
- 教育领域的技术革新大五人格的引领作用
- 探索教育心理学的奥秘激发个人潜能
- 智慧城市公共服务平台的创新设计与应用
- 老年教育中的心理健康与社会支持研究-洞察阐释
- 2025年工程造价与管理考试题及答案
- 2025年第一季度烟花爆竹安全作业特种作业操作证考试试卷(新手实战卷)
- 2025版护理十大安全目标
- 2025年 荆州市荆发控股集团招聘考试笔试试卷附答案
- 学校关工委管理制度
- 三年级数学计算题专项练习及答案
- 出纳应聘试题及答案
- 2025至2030中国清分机行业发展趋势分析与未来投资战略咨询研究报告
- DB31-T 1593-2025 基于自动驾驶功能的公交运营技术要求
- 地理●甘肃卷丨2024年甘肃省普通高中学业水平等级性考试高考地理真题试卷及答案
评论
0/150
提交评论