1 枚举
JDK 1.5加入了枚举类型,可以使用该功能取代以往定义常量的方式,同时枚举类型还赋予程序在编译时检查类型的功能。在以往设置常量时,通常将常量放置在接口中,这样在程序中就可以直接使用,并且该常量不能被修改,因为在接口中定义常量时,该常量的修饰符为static和final。而使用枚举类型定义和使用常量的程序示例如下。
package captain;
//枚举类型定义和使用常量的演示。
public class EnumDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
doit(Constants.Constants_A);
doit2(Constants2.Constants_A);
doit(3);//编译器不会报错
//doit2(3);//编译器会报错
}
enum Constants2{//将常量放置在枚举类型中
Constants_A, Constants_B
}
public static void doit(int c){
switch(c){
case Constants.Constants_A:
System.out.println("doit() Constants_A");
break;
case Constants.Constants_B:
System.out.println("doit() Constants_B");
break;
}
}
public static void doit2(Constants2 c){
switch(c){
case Constants_A:
System.out.println("doit2() Constants_A");
break;
case Constants_B:
System.out.println("doit2() Constants_B");
break;
}
}
}
interface Constants{//将常量放置在接口中
public static final int Constants_A = 1;
public static final int Constants_B = 10;
}
2 泛型
JDK 1.5加入了泛型机制,泛型的好处是 将运行时期的问题ClassCastException提前到了编译时的安全检查; 避免了强制类型转换。在出现泛型之前,Java也提供了对Object的引用“任意化”操作,这种任意化操作就是对Object引用进行“向上转型”和“向下转型”操作,但某些强制类型转换错误也许不会被编译器捕捉,而在运行后出现异常,可见强制类型转换存在安全隐患,所以在此提供了泛型机制。
泛型类程序示例:
package captain;
//泛型类的使用
public class GenericDemo<T> {
private T t;
public T get(){
return t;
}
public void set(T t){
this.t = t;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
GenericDemo<Boolean> t1 = new GenericDemo<Boolean>();//基本类型需要用其包装类。
GenericDemo<Float> t2 = new GenericDemo<Float>();//基本类型需要用其包装类。
t1.set(true);
t2.set(1.1f);
Boolean b = t1.get();
Float f = t2.get();
System.out.println(b);
System.out.println(f);
}
}
另:泛型通配符?的使用。泛型上限定? extends AnyClass,多用于对象存储时;泛型下限定? super AnyClass,多用于对象获取时。