枚举类与泛型总结
来源:互联网 发布:可视化软件 编辑:程序博客网 时间:2024/05/22 00:00
JDK 5新增的 enum 关键字用于定义一个枚举类。
手动实现枚举类:
通过 private 将构造器隐藏起来
把这个类的所有可能实例都使用 public static final 修饰
属性不应允许被改动, 所以应该使用 privatefinal 修饰
枚举类和普通类的区别:
使用 enum 定义的枚举类默认继承了java.lang.Enum 类
枚举类的构造器只能使用 private 访问控制符
枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾). 列出的实例系统会自动添加public static final 修饰
枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
枚举类常用的方法
Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。常用方法:
name():返回此枚举常量的名称,在其枚举声明中对其进行声明
ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
valueof(ClassenumClass, String name):返回带指定名称的指定枚举类型的枚举常量。静态方法
values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。
Public class Text{
PublicStatic void main(String[] args){
返回此枚举常量的名称,在其枚举声明中对其进行声明
String name=Grade.A.name();
System.out.println(name);
返回枚常量的序数(它在枚举声明的位置,其中初始量序数为零)。
Int index=Grade.B.ordinal();
System.out.println(index);
返回带指定名称的指定枚举类型的枚举常量。
Grade grade=Grade.valueOf(Grade.class,”A”);
System.out.println(grade.name());
此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
Grade[] grades=Grade.values();
For(Grade g:grades){
System.out.println(g.name)};
}
}
}
JDK5中的泛形允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生问题,转变为编译时的问题,以此提高程序的可读性和稳定性(尤其在大型程序中更为突出)。
注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。
泛形的基本术语,以ArrayList<E>为例:<>念着typeof
ArrayList<E>中的E称为类型参数变量
ArrayList<Integer>中的Integer称为实际类型参数
整个称为ArrayList<E>泛型类型
整个ArrayList<Integer>称为参数化的类型ParameterizedType
使用迭代器迭代泛形集合中的元素。
Public void test1(){
List<Integer> list =new ArrayList<Integer>();
List.add(1);
List.add(2);
List.add(3);
Iterator<Integer> it=lis.iterator();
While(it.hasNext()){
System.out.println(it.next());
}
}
使用增强for循环迭代泛形集合中的元素。
Public void test1(){
List<Integer> list =new ArrayList<Integer>();
List.add(1);
List.add(2);
List.add(3);
For(String str:list){
System.out.println(str);
}
存取HashMap中的元素。
Public void main test(){
Map<String,Integer> map=new HashMap<Stirng,Integer>();
Map.put(“key01”,1);
Map.put(“key02”,2);
Map.put(“key03”,3);
(“key01”,1)看成一个Map.Entry<String,Integer>
Set<Map.Entry<String,Integer>> set=map.entrySet();
Fro(Map.Entry<String,Integer>en:set){
System.out.println(en.getKey()+” ”+en.getValue());
}
}
如果一个类多处都要用到同一个泛型,这时可以把泛形定义在类上(即类级别的泛型),语法格式如下:
public class GenericDao<T> {
private T field1;
public void save(T obj){}
public T getId(int id){}
}
注意
在类级别上定义的泛型,只对类的非静态成员有效
静态方法不能使用类定义的泛形,而应单独定义泛形。
泛型的高级应用——通配符
定义一个方法,接收一个集合,并打印出集合中的所有元素,如下所示:
void print (Collection<String> c) {
for (String e : c) {
System.out.println(e);
}
}
问题:该方法只能打印保存了String对象的集合,不能打印其它集合。通配符用于解决此类问题,方法的定义可改写为如下形式:
void print (Collection<?> c) {//Collection<?>(发音为:"collection of unknown")
for (Object e : c) {
System.out.println(e);
}
}
总结:使用?通配符主要用于引用对象,使用了?通配符,就只能调对象与类型无关的方法,不能调用对象与类型有关的方法。
- 枚举类与泛型总结
- 枚举与泛型知识点总结
- 泛型与枚举
- 枚举 与泛型
- 枚举与泛型
- 泛型与枚举
- 枚举类型与泛型
- 枚举值与枚举类
- 枚举类总结
- java 枚举类总结
- 枚举类总结
- 异常,类与枚举
- java枚举类使用总结
- 黑马程序员有关枚举,反射,泛型的总结
- 黑马程序员_枚举和泛型总结
- 枚举总结
- 枚举总结
- 枚举总结
- 求一元二次方程的根
- ORACLE优化器介绍
- 黑客搞渗透必须知道的JS.PHP,URL转码表
- hdu 1532
- iPhone开发之等待有关控件(UIActivityIndicatorView,UIProgressView)
- 枚举类与泛型总结
- Android Dialog用法
- 可编辑的表格
- vmware 主机已禁用 usb 设备连接 的解决办法
- 软件工程总结
- Android驱动不算什么!!
- Web应用程序简介
- Andoird jni 调用类型转换
- android ndk 常用宏定义