java高新技术二

泛型(Generics

jdk1.5提供了最实用和最爽的机制可以说是泛型(Generics)了。它希望程序员在定义个集合类时明确的表示要向集合中装入哪种数据类型。然后指定类型以外的数据将无法被加入。
在jdk1.4中只能这样定义一个集合:
List list =new ArrayList();
我们可以像其中加入任何类型数据 如:
list.add(1)
list.add("abc")
我们在获取集合中元素的时候就会出错,会带来很大麻烦。
jdk1.5以后可以这样定义了:List<E> list=new ArrayList< E>()
如 List  <Integer>  list =  new  ArrayList <Integer>  ()
当我们要给里面加入其他类型时编译器就会报错,其中E只能接受对象数据类型,拒绝接受基本数据类型,如
List  <Integer>  list =  new  ArrayList <Integer>  ()
list.add(1);                //此处用到了 自动装箱
list.add("abc")            //编译器会报错。因为我们已经定义了只能加入Integer类型
int i=list.get(0);         //无需再进行类型转换,而且用到 自动拆箱 了。
泛型是提供给javac编译器使用过的,可以限定集合中输入类型。让编译器挡住程序中的非法输入。编译器编译带类型的集合时去掉“类型”信息。使程序效率不受影响,即编译器生成的字节码无类型信息。因此我们可以跳过编译器向泛型结合加入其他类型数据,这里用到了 反射机制 。如
list.getClass().getMethod("add", Object.class).invoke(list,"abc");
这样成功的想其中加入了字符串“abc”
使用时一定要注意:参数化类型不考虑类型的继承关系!下面语句是错的
Vector <String> V= new Vector<Object>()

枚举(enum

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。这样我们使用一般类就不方便了,我们无法控制用户生成星期八甚至13月。jdk1.5为我们提供了一个特殊的类:enum
可以这样定义一个枚举
enum Week{sun,mon,tus,wen,thur,fri,sat;}
WeekD中定义的七个枚举常量之间使用“,”分割开来。这些常量默认都是“public static final”的,所以你就不必再为它们加上“public static final”修饰(编译器会提示出错)
我们还可以对枚举进行更高要求的设计:
我们在枚举类型中加入构造器和抽象方法:
enum Week{
sun(0){                          //枚举变量定义时可以带参数,可以完成抽象方法。
int getvalue()
{
return s;          //实现抽象方法
}
},
mon(1){
int getvalue(){
return s;
}
},
tus(2){
int getvalue(){
return s;
}
},
Week(int s){                 //构造器。
s=s;
}
abstract int getvalue();       //定义抽象方法 ,由实例对象完成方法
private static int s;
}
}
可以看出枚举是一个特殊的类,使用时还要注意:
(1) 枚举类型不能使用extends关键字,但是可以使用implements关键字。这样我们可以把不同枚举类型共有的行为提取到接口中,来规范枚举类型的行为。 
       (2) 永远不能直接调用枚举构造函数。通过在常量后面定义的变元,会自动调用枚举构造函数。枚举类型的自定义构造函数并不能覆盖默认执行的构造函数,它会跟在默认构造函数之后执行。可以重载枚举的构造方法。 
       (3) 枚举类型的自定义构造函数必须是私有的,但你不能显式加private,否则会出错
       (4)枚举类型中枚举常量的定义必须放在最上面,其后才能是变量和方法的定义。
       (5)枚举中的常量默认都是public static final,这就是为什么枚举中的常量建议全大写的原因,虽然它默认是public static final,但你在声明常量时却不能显式使用public static final,否则编译器反而会报错误。
   (6)当枚举中只有一个枚举变量时相当与 单例设计模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值