Java程序设计-8-范型、枚举和内部类

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
6
整理ppt
8.1.3声明泛型方法
泛型方法
除了泛型类和接口外,还可以只单独定义一个方法作为泛型方 法,可以指定方法参数或者返回值指定为泛型类型的声明,留 待运行时确定
泛型方法就可以声明在泛型类中,也可以声明在普通类中。
public class ArrayTool { public static<E> void insert(E[] e,int idx){ //请自己添加代码 } public static<E> E valueAt(E[] e){ //请自己添加代码 }
Java程序设计
第八章 泛型、枚举和内部类
1
整理ppt
学Βιβλιοθήκη Baidu目标
理解泛型的作用,掌握泛型类的声明及实例化 的方法 掌握枚举类的定义和使用 掌握内部类的定义和使用方法 掌握匿名类的使用方法
2
整理ppt
8.1泛型
什么是泛型
泛型也被称为参数化类型(parameterized type) ,就是在定义类、接口和方法时,规定了创建将 要处理的对象类型。
11
整理ppt
1 声明枚举类
public enum Grade { A,
B,
C,
D,
E
};
它包括一个关键字enum,一个新枚举类型的 名字 Grade以及为Grade定义的一组值,这里 的值既非整型,亦非字符型。
5
整理ppt
8.1.2声明泛型接口
声明
public interface IPool <T>{ T get(); int add(T t);
}
实现
public class GenericPool<T> implements IPool<T>{ …
}
public class GenericPool implements IPool<Account>{ …
当泛型参数这样声明时,在实例化一个泛型类时,需要明确类 型必须为指定上界类型或者子类。
NumberGenericPool<Number> pool= new NumberGenericPool<Number>(2);
8
整理ppt
8.1.4泛型参数的限定
定义参数的下界
List<? super CashCard> cards=new ArrayList<T>();
}
7
整理ppt
8.1.4泛型参数的限定
定义泛型参数的上界
public class NumberGenericPool< T extends Number>
说明
上述方式的声明规定了NumberGenericPool类所能处理的参 数其类型和Number有继承关系
extends关键字所声明的上界既可以是一个类,也可以是一个 接口
声明泛型类
要求,一个实现先进先出的循环队列。 怎么实现这样的数据结构? 要处理的队列元素类型是什么?
3
整理ppt
实现策略一:非泛型的方法
//程序8-1:一个实现了先进先出的循环队列 p//u从bl数ic组cl中as取s 得Po一ol个{元素,如果没有返回null pubplricivOatbejeOcbt jgeectt[(]){objArray; Obj/e/记ct 录re当su前lt数=n组u中ll;第一个元素出现的位置 int pidrixv=at(eheinatdLhoeca+dL1o)% c objArray.length;//指针后移一位 if(o/b/j记A录rra当y前[id数x]组!=中n最ul后l){一次插入元素位置 respurltiv=aotbejAinrtratayi[liLdoxc];; opbujAblrircaPyo[iodlx(i]n=tnleunll;gth){ heaodbLjAocrr+a+y=;/n/更ew新O队b列je头ct的[le位ng置th]; } headLoc=-1;//默认在第一个元素之前 retutarinlLroecs=u-l1t;;//默认在第一个元素之前 }}
单独的?,用于表示任何类型。
? extends type,表示带有上界。 ? super type,表示带有下界。
10
整理ppt
8.2枚举
如果我们想定义一个成绩类,成绩的范围只能 是A、B、C、D、E,接受其它类型的值都是 违法的,应该如何定义呢?我们可以定义一个 成绩类,但如何表示成绩呢,整型、字符型? 似乎都不合适,因为没有明确的类型对应,即 使是字符型,那么超出了"A、B、C、D、E" 范围的字符程序需要特别处理,以便保证应用 安全。Java语言提供了一种称为枚举的类型 定义方法.
4
整理ppt
实现策略二:泛型的方法
//**程从序数组8-中2:取一得个一利个用元泛素型,实如现果了没先有进返先回出nu的ll循,环队列, T方是法未的知返类回型值*类/ 型为T,这里和类的未知参数一致*/
ppuubblliicc cTlagsest(G){enericPool<T> { pOrbivjeactte rOebsujeltc=t[n]uollb;jArray; pinrtiviadtxe=i(nhtehaedaLdoLco+c1;)/%/记o录bj第Ar一ra个y.元len素g出th现;/的/指位针置后移一位 pifr(iovbajtAerrinaty[tiadixlL]o!=c;n/u/记ll)录{ 最后一次插入元素位置 preusbulilct=GoebnjAerrircaPyo[oidl(xi]n;t length){ objArorbajyA[ridraxy]==nnuewll; Object[10]; headhLoeca+dL+o;c=-1;//默认在第一个元素之前 } tailLoc=-1;//默认在第一个元素之前 }return (T)result; }
说明
通过使用super关键字可以固定泛型参数的类型为某种类 型或者其超类
当程序希望为一个方法的参数限定类型时,通常可以使 用下限通配符
public static <T> void sort(T[] a, Comparator<? super T> c)
9
整理ppt
通配符
“?”符号表明参数的类型可以是任何一种类型 ,他和参数T的含义是有区别的。T表示一种未知 类型,而“?”表示任何一种类型。这种通配符 一般有以下三种用法:
相关文档
最新文档