JDK1.5之枚举

image.png

枚举能用就用,不能用就别用。
1.枚举的基本用法
2.枚举的定义组成
先观察以下三原色的多例模式代码:

class Color{
    private String title;
    private static final Color RED=new Color("Red Color");
    private static final Color GREEN=new Color("Green Color");
    private static final Color BLUE=new Color("Blue Color");
    private Color(String title){
        this.title=title;
    }

    @Override
    public String toString() {
        return this.title;
    }
    public static Color getInstance(int ch){
        switch(ch){
            case 1:
                return RED;
                case 2:
                return GREEN;
                case 3:
                return BLUE;
                default:
                return null;
        }

    }
}


public class TestDemo {
    public static void main(String[] args) {
        Color red=Color.getInstance(1);
        System.out.println(red);

    }
}

结果:


image.png

但是以上代码太多了,因而2005年以后 java增加enum关键字来支持枚举。

以上代码化成枚举:

enum Color{//定义了枚举类型
    RED,GREEN,BLUE;//表示此处为实例化对象
}

public class TestDemo {
    public static void main(String[] args) {
        Color red=Color.RED;
        System.out.println(red);

    }
}

同样满足结果,所以我们发现,可以使用枚举完全简化替代多例设计模式。

需要注意的是,严格来讲,枚举并不是一个新的功能,用enum关键字定义的枚举类型就相当于一个类继承了Enum类而已。

翻阅JDK1.8文档
public abstract class Enum> extends Object

枚举类型接收所有枚举类型的子类泛型作为泛型。

Enum是一个抽象类,里面定义的构造如下。
protected Enum(String name,int ordinal)
Enum类的构造方法依然是被封装的,所以也属于构造方法私有化的应用范畴,所有的多例设计模式都必须构造方法私有化。

Enum类中定义了两个方法:
1.取得枚举的名字:
public final String name();
2.取得枚举的索引:
public final int ordinal();
除了以上的两个方法,还有一个value方法,这个方法将枚举对象以对象数组的形式全部返回。

改变示例代码:

enum Color{//定义了枚举类型
    RED,GREEN,BLUE
}

public class TestDemo {
    public static void main(String[] args) {
        for (Color c : Color.values()) {
            System.out.println(c.ordinal()+"."+c.name());
        }
    }
}
image.png

总结:
1.enum是一个关键字,Enum是抽象类
2.使用enum定义的枚举就相当于一个类继承了Enum这个抽象类

使用枚举定义其它结构

注意点:枚举之中定义的构造方法不能够使用public声明,如果没有无参构造,手动调用构造传递参数
枚举对象必须要放在首行,随后才可以定义属性,构造,普通方法
范例:扩充枚举功能:

enum Color{
    RED("hongse"),GREEN("lvse"), BLUE("lanse");//实例化的枚举对象
    private String title;//属性
    private Color(String title){
        this.title=title;
    }
    public String toString(){
        return this.title;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        for (Color c : Color.values()) {
            System.out.println(c);//直接输出调用toString
        }
    }
}

此时结果和之前定义多例设计模式操作方式就完全相同,而且代码更加的简单。枚举还可以实现接口。

范例:枚举实现接口:

interface Message{
    public String getTitle();
}

enum Color implements Message{
    RED("hongse"),GREEN("lvse"), BLUE("lanse");//实例化的枚举对象
    private String title;//属性
    private Color(String title){
        this.title=title;
    }
    public String getTitle(){
        return this.title;
    }
    public String toString(){
        return this.title;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        for (Color c : Color.values()) {
            System.out.println(c.getTitle());//直接输出调用toString
        }
    }
}

此外还能定义抽象类。

枚举的实际作用:

1.用于switch的选择判断(了解,不使用)

enum Color implements Message{
    RED,GREEN,BLUE;//实例化的枚举对象
}


public class TestDemo {
    public static void main(String[] args) {
        Color c=Color.RED;
        switch(c){
            case RED:
                System.out.println("Red Color");
                break;
            case GREEN:
                System.out.println("Green Color");
                break;
            case BLUE:
                System.out.println("Blue Color");
                break;
            
        }
    }
}

总结

1.枚举属于高级的多例设计模式
2.一般C语言开发者习惯使用枚举,别的不熟悉的不建议使用了。

你可能感兴趣的:(JDK1.5之枚举)