Java 与 C 的枚举

来源:互联网 发布:java消息订阅模式 编辑:程序博客网 时间:2024/04/29 12:10

枚举是什么,用我自己的话说就是一个变量可能不仅仅只有一个值,而枚举则可以把它们存在的情况都一一列举出来
enum关键字,来定义枚举的

1.C的枚举

//C#include <stdio.h>#include <stdlib.h>int main(){    enum color{red,green,blue};    enum color test ;    test = red ;    switch(test)    {        case red:            printf("red");            break;        case green:            printf("green");            break;        case blue:            printf("blue");            break;        default :            printf("error");            break;    }    return 0;}

2.java的枚举

1.枚举的简介

//javaenum Color {  //定义枚举类    RED,GREEN,BLUE ;  //表示此处为实例化对象}public class Nice {    public static void main(String args[]) {        Color color = Color.BLUE ;        System.out.println(color);    }}//java使用枚举可以简化的替代多例设计模式

一般的枚举就这样,但是java虽然枚举支持的晚,但是java的枚举不仅仅只有这些

Enum是一个抽象类,构造如下:protected Enum(String name,int ordinal)
Enum类里面定义两个方法:
取得枚举的索引public final int ordinal() ;
取得枚举的名字public final String name() ;

还有使用enum关键字定义的枚举里,还有一个values()方法,将枚举对象对象数组的形式全部返回

enum Color {    RED ,GREEN,BLUE ;}public class Nice {    public static void main(String args[]) {        //foreach循环        for(Color c : Color.values()) {  //以对象数组形式全部返回              System.out.println(c.ordinal() + "-" + c.name());        }    }}

那么java有 enumEnum ,那么它们区别是什么?
1.enum是一个关键字,而Enum是一个抽象类
2.使用enum定义的枚举就相当于一个类继承Enum这个抽象类

2.枚举定义其他结构

其实不止是多例设计模式里可以定义属性和方法,枚举也可以,只是有点要求
1.枚举中定义的构造方法不能够使用public声明(其余都可以),如果没有无参构造,请手工调用传递参数
2.枚举对象必须放在首行,随后才可以定义属性、构造、普通方法

例:

//和C语言一样,也支持switch判断enum Color {    RED,GREEN,BLUE;}public class Nice {    public static void main(String args[]) {        Color c = Color.BLUE ;        switch(c) {  //枚举判断            case RED :                System.out.println("you like red");                break;             case GREEN :                System.out.println("you like green");                break;            case BLUE :                System.out.println("you like blue");                break;            default :                System.out.println("error");                break;        }    }}
//实现与多例模式操作方式相同,代码更简洁enum Color {    RED("红色"),GREEN("绿色"),BLUE("蓝色") ;  //最上面    private String title;  //属性    private Color(String title) {        this.title = title ;    }    public String toString() {        return this.title ;    }}public class Nice {    public static void main(String args[]) {        for(Color c : Color.values()) {            System.out.println(c);  //直接输出对象调用toString        }    }}
//枚举实现接口interface IMessage {    public String getTitle() ;}enum Color implements IMessage{    RED("红色"),GREEN("绿色"),BLUE("蓝色") ;  //最上面    private String title;  //属性    private Color(String title) {        this.title = title ;    }    public String toString() {        return this.title ;    }    public String getTitle() {        return this.title ;    }}public class Nice {    public static void main(String args[]) {        IMessage msg = Color.BLUE ;        System.out.println(msg.getTitle());    }}
//枚举可以在每个对象后面使用匿名内部类的形式实现抽象方法interface IMessage {    public String getTitle() ;}enum Color implements IMessage{    RED("红色"){        public String getTitle() {            //为什么要加字符串呢,因为不加就会无法转换为String            return "为了转换String," + this ;  //这是另外一个结构,所以不可以使用this.title        }    },GREEN("绿色"){        public String getTitle() {            return "为了转换String," + this ;        }    },BLUE("蓝色") {        public String getTitle() {            return "为了转换String," + this ;        }    };    private String title;  //属性    private Color(String title) {        this.title = title ;    }    public String toString() {        return this.title ;    }}public class Nice {    public static void main(String args[]) {        IMessage msg = Color.BLUE ;        System.out.println(msg.getTitle());    }}
//枚举里直接定义抽象方法interface IMessage {    public String getTitle() ;}enum Color implements IMessage{    RED("红色"){        public String getTitle() {            return "you like " + this ;        }    },GREEN("绿色"){        public String getTitle() {            return "you like " + this ;        }    },BLUE("蓝色"){        public String getTitle() {            return "you like " + this ;        }    };    private String title;  //属性    private Color(String title) {        this.title = title ;    }    public String toString() {        return this.title ;    }    public abstract String getTitle() ;//抽象方法,每一个枚举对象必须覆写抽象方法}public class Nice {    public static void main(String args[]) {        System.out.println(Color.RED.getTitle());    }}

恩,功能很多,用不用随你(doge脸)。。。

0 0
原创粉丝点击