首页 > 代码库 > 枚举和泛型

枚举和泛型

1、枚举类型

JDK1.5中新增了枚举类型与泛型。

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中,此外,它还提供了安全检查功能。

枚举类型本质上还是以类的形式存在。

enum是定义枚举类型的关键字。

例如:在项目中创建Constants接口,在接口中定义敞亮的常规方式:

public interface Constants{
    public static final int Constants_A=1;
    public static final int Constants_B=12;
}

新增枚举类型后就逐渐取代了这种常量定义方式,使用枚举类型定义常量的语法如下:

public enum Constants{
    Constants_A,
    Constants_B,
    Constants_C
}

2、泛型

(1)泛型实质上就是使程序员定义安全的类型。

在没有出现泛型之前,Java也提供了对Object的引用“任意化”操作,这种任意化操作就是对Object引用进行“向下转型”及“向上转型”操作,但某些强制类型转换的错误也许不会被编译器捕捉,而在运行后出现异常,可见强制类型转换存在安全隐患,所以再次提供了泛型机制。

例如:在项目中创建Test类,在该类中使基本类型向上转型为Object类型:

 
public class Test {
    private Object b; // 定义Object类型成员变量
    
    public Object getB() { // 设置相应getXXX()方法
        return b;
    }
    
    public void setB(Object b) { // 设置相应setXXX()方法
        this.b = b;
    }
    
    public static void main(String[] args) {
        Test t = new Test();
        t.setB(new Boolean(true)); // 向上转型操作
        System.out.println(t.getB());
        t.setB(new Float(12.3));
Float f = (Float) (t.getB()); // 向下转型操作 System.out.println(f); } }
 

在本实例中,Test类中定义了私有的成员变量b,它的类型为Object类型,同时为其定义了相应的setXXX()与getXXX()方法,

在类的主方法中,将new Boolean(true)对象作为setB()方法的参数,由于setB()方法的参数类型为Object,这样就实现了“向上转型”操作;

同时在调用getB()方法时,将getB()方法返回的Object对象以相应的类型(这里是Float)返回,这个就是“向下转型”操作。

因为“向上转型”是安全的,而如果进行”向下转型“操作时用错了类型,或者并没有执行该操作,就会出现ClassCastException异常。

(2)定义泛型类

泛型机制的语法如下:

类名<public class OverClass<T> { //定    private T over; // 定义泛型成员变量

    public T getOver() { // 设置相应getXXX()方法
        return b;
    }
    
    public void setOver(T over) { // 设置相应setXXX()方法
        this.b = b;
    }
    
    public static void main(String[] args) {
        //实例化一个Boolean型的对象
OverClass<Boolean> over1=new OverClass<Boolean>();
//实例化一个Float型对象
OverClass<Float> over2=new OverClass<Float>();

over1.setOver(true); //不需要类型转换 over2.setOver(12.3f);

Boolean b=over1.getOver(); //不需要类型转换
Float f=over2.getOver();
System.out.println(b); System.out.println(f); } }
 

枚举和泛型