安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > 编程茶楼 > JAVA > Java enum 枚举还可以这么用

Java enum 枚举还可以这么用

时间:2015-02-18来源: 作者:点击:
Java enum 枚举还可以这么用

  在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外。然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看。 //本文来自安云网

Java enum 枚举还可以这么用 //内容来自AnYun.ORG

 1、可以在enum中添加变量和方法

  先来看一段代码示例: //内容来自AnYun.ORG

public enum State {
        Normal("正常态", 1), Update("已更新", 2), Deleted("已删除", 3), Fired("已屏蔽", 4);
        // 成员变量
        private String name;
        private int index;

        // 构造方法,注意:构造方法不能为public,因为enum并不可以被实例化
        private State(String name, int index) {
            this.name = name;
            this.index = index;
        }

        // 普通方法
        public static String getName(int index) {
            for (State c : State .values()) {
                if (c.getIndex() == index) {
                    return c.name;
                }
            }
            return null;
        }

        // get set 方法
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getIndex() {
            return index;
        }

        public void setIndex(int index) {
            this.index = index;
        }
    } 

//内容来自安云网

  从上面的代码中我们可以看到,定义完枚举值,然后在其后面加上分号,接着就可以定义其他的变量、方法了。另外需要特别说明的是,enum中的构造方法不可以用public标识,这样做是为了防止用户实例化enum。

//本文来自安云网

 2、可以用来定义常量

  先来回顾一下Java中如何定义常量吧,看下面一段代码:

//本文来自安云网

public static final int normalState = 1;
private static final int updateState = 2; //本文来自安云网 

  下面我们还可以用enum枚举来代替上面的常量定义,代码如下: //内容来自AnYun.ORG

public enum State {  
  Normal, Update, Deleted, Fired
} 
//内容来自安云网

  在Java中用enum来定义常量在语法上没有什么优势,但是enum枚举类型可以提供更多的操作功能。 //本文来自安云网

 3、在enum中实现接口

  先来看下面一段代码: //内容来自AnYun.ORG

public interface ICanReadState {
        void read();

        String getState();
}

    public enum State implements ICanReadState {
        Normal("正常态", 1), Update("已更新", 2), Deleted("已删除", 3), Fired("已屏蔽", 4);

        private String name;
        private int index;

        private State(String name, int index) {
            this.name = name;
            this.index = index;
        }

        // 接口方法1

        @Override
        public String getState() {
            return this.name;
        }

        // 接口方法2
        @Override
        public void read() {
            System.out.println(this.index + ":" + this.name);
        }
    } //内容来自AnYun.ORG 

  和一般的类中使用接口一样,enum枚举中同样可以继承接口,并实现接口中的所有方法,这样做的好处在于可以更方便地对枚举中的值进行排序、比较等操作,封装性更好。

//本文来自安云网

 总结

  说白了,enum枚举类型是一个不可以被继承的final类,就以上面的State枚举为例,如果你查看enum类型的字节码,其实是State类型的类静态常量。

//内容来自安云网

  via:ceocode – 小峰

//内容来自安云网

QQ群: WEB开发者官方总群(196171896) 验证消息:Admin10000
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容