Java 枚举

2020-11-10 23:06:19 浏览数 (1)

金言:少用则用之!

枚举:

【多例设计】

代码语言:javascript复制
package cn.mldn.utli;

class Color {
    private String title ;
    //多例设计模式
    private static final Color RED = new Color("红色");
    private static final Color GRE = new Color("绿色");
    private static final Color BLUE = new Color("蓝色");
    private Color(String title) {
        this.title = title ;
    }
    public static Color getInstance(int ch) {
        switch(ch) {
        case 1 :
            return RED ;
        case 2 :
            return GRE ;
        case 3 : 
            return BLUE ;
        default :
            return null ;
        }
    }
    public String toString() {
        return this.title ;
    }
}

public class TestDemo {

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

枚举严格来讲所有语言都支持!在枚举产生之前,都是采用多例设计模式实现。

枚举概念产生后,出现了新的 enum 关键字:

定义枚举:

代码语言:javascript复制
package cn.mldn.utli;

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

public class TestDemo {

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

定义枚举之后,和先前的多例设计code相比较,枚举可以完全简化的替代多例设计模式

枚举关键字 enum定义的枚举类实际上就是继承了 Enum 类的子类:

  Enum是一个抽象类;Enum类中定义了两个方法:

    |-- 取得枚举的索引: public final int ordinal()

    |-- 取得枚举的名字: public final String name()

    |-- 枚举类之中还有一个 values()方法,它将对象以对象数组的形式返回。

___________________________________________

定义其他结构:

  枚举之中定义的构造法方法,不可以使用public声明,必须构造私有化;

  枚举对象必须放在首行,其后才会定义属性、构造、方法;

代码语言:javascript复制
enum Color {
    RED("红色"),BLU("绿色"),GREEN("黄色");  //枚举对象定义在枚举类中的首行
    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()) ;
        }
    }
}

枚举实现接口:

代码语言:javascript复制
interface Message{  // 定义接口类
    public String getTitle() ;
}

enum Color implements Message {  // Color枚举类实现接口
    RED("红色"),BLU("绿色"),GREEN("黄色");  //枚举对象定义在枚举类中的首行
    private String title ; // 枚举类中的属性
    private Color(String title) {
        this.title = title ;
    } 
    public String toString() {
        return this.title;
    }
    public String getTitle() { 
        // 覆写接口类方法
        return this.title;
    }

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

——————————

枚举的应用:

枚举中支持swicth语句函数 >>>>

代码语言:javascript复制
enum Color {
    RED , GREEN , BLUE ;
}
public class TestDemo {
    public static void main(String [] args) {
        Color c = Color.RED;
        switch(c) {
            case RED : 
                System.out.println("RED") ;
                break ;
            case GREEN :
                System.out.println("GREEN") ; 
                break ;
            case BLUE :
                System.out.println("BLUE") ;
                break ;
        }
    }
}

#

代码语言:javascript复制
enum Sex {
    MALE("男") , FEMALE("女") ;
    private String title ;
    private Sex (String title ) {
        this.title = title ;
    }
    public String toString() {
        return this.title ;
    }
}    

class Person {
    private String name ;
    private int age ;
    private Sex sex ;
    public Person(String name , int age , Sex sex) {
        this.name = name ;
        this.age = age ;
        this.sex = sex ;
    }
    public String toString() {
        return this.name   this.age   this.sex ;
    }
}
public class TestDemo {
    public static void main(String [] args) {
        System.out.println(new Person("于哥" , 24 , Sex.MALE));    
    }
}

————————

总结:

  枚举属于高级的多例设计模式

  枚举的使用根据个人是否习惯使用,不习惯使用的可以依旧使用多例设计模式

0 人点赞