枚举的意义,用途,作用,用法,作用场景

下面给出在枚举中声明属性和方法的示例:

package com.fhp.enumexample;

public enum TypeEnum {
    VIDEO(1), AUDIO(2), TEXT(3), IMAGE(4);

    int value;

    TypeEnum(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

在这个枚举中,每个枚举的值都有一个对应的int型字段,而且不同的枚举值也会有不同的int数值。同时,它和普通的类一样,可以声明构造器和各种各样的方法。如:

TypeEnum type = TypeEnum.TEXT;//type的value属性值为3。
System.out.println(type.getValue());//屏幕输出3。

如果要为每个枚举值指定属性,则在枚举中必须声明一个参数为属性对应类型的构造方法(不能是public)。否则编译器将给出The constructor TypeEnum(int, String) is undefined的错误。在此例中,属性为int型,因此构造方法应当为int型。除此之外,还可以为枚举指定多个属性,如:

package com.fhp.enumexample;

public enum TypeEnum {
    VIDEO(1, "视频"), AUDIO(2, "音频"), TEXT(3, "文本"), IMAGE(4, "图像");

    int value;
    String name;

    TypeEnum(int value, String name) {
        this.value = value;
        this.name = name;
    }

    public int getValue() {
        return value;
    }

    public String getName() {
        return name;
    }
}

enum还内置了许多方法,常用的如下:

int compareTo(E o)?
? ? ? ? ? 比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass()?
? ? ? ? ? 返回与此枚举常量的枚举类型相对应的 Class 对象。

String name()?
? ? ? ? ? 返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal()?
? ? ? ? ? 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()
? ? ? ? ? ?返回枚举常量的名称,它包含在声明中。

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)?
? ? ? ? ? 返回带指定名称的指定枚举类型的枚举常量。

static T[] values()

返回该枚举的所有值。

现在,假设要为该枚举实现一个根据整数值生成枚举值的方法,可以这样做:

package com.fhp.enumexample;

public enum TypeEnum {
    VIDEO(1, "视频"), AUDIO(2, "音频"), TEXT(3, "文本"), IMAGE(4, "图像");

    int value;
    String name;

    TypeEnum(int value, String name) {
        this.value = value;
        this.name = name;
    }

    public int getValue() {
        return value;
    }

    public String getName() {
        return name;
    }

    public static TypeEnum getByValue(int value) {
        for(TypeEnum typeEnum : TypeEnum.values()) {
            if(typeEnum.value == value) {
                return typeEnum;
            }
        }
        throw new IllegalArgumentException("No element matches " + value);
    }
}

getByValue(int)即为整数值转枚举值的方法。调用values()方法获取到该枚举下的所有值,然后遍历该枚举下面的每个值和给定的整数是否匹配,若匹配直接返回,若无匹配值则抛出IllegalArgumentException异常,表示参数不合法,兼有有效性验证的作用。

综上,我们可以看到,在JDK5中新引入的枚举完美地解决了之前通过常量来表示离散量所带来的问题,大大加强了程序的可读性、易用性和可维护性,并且在此基础之上又进行了扩展,使之可以像类一样去使用,更是为Java对离散量的表示上升了一个台阶。因此,如果在Java中需要表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量,应当尽量舍弃常量表示的做法,而将枚举作为首要的选择。
————————————————
版权声明:本文为CSDN博主「Jicky-17」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014527058/article/details/52751488

原文地址:https://www.cnblogs.com/jsll/p/11613032.html

时间: 2024-07-30 21:35:32

枚举的意义,用途,作用,用法,作用场景的相关文章

Volatile关键字用法适合场景

Volatile用法适合场景,分以下几点说明:1.Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与 共享成员变量的原始值对比. 2.Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线 程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值. 3.volatile只保证了可见性,所以Volatile适合直接赋值的场景,如:多线

拷贝被人的drawRect绘图分类用途、用法很全。

拷贝被人的drawRect绘图分类用途,用法很全.留着.供用时参考 // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(

W5500 keep-alive的用途与用法

大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了.为什么?下面对这个问题进行解释说明,并提出解决办法. 图1中的上位机程序作为客户端,连接W5500服务器. 图2是对这个问题的wireshark抓包说明.其中192.168.11.114为W5500的IP,192.168.11.110为PC的IP.下图中的第48个包是第一次握手:建立连接时,客户端发送SYN包到服务器,等待服务器确认:第49个包为第二次握手:服务器收到SYN包,必须确认客

数据库中索引的作用及运用场景

作用:提高数据的查询速度 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间. 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能. 常见的需要用到索引的情况: 1,在经常需要搜索的列上,可以加快搜索的速度: 2,在作为主键的列上,强制

ActiveMQ的作用总结(应用场景及优势)以及springboot+activeMq 实战

业务场景说明: 消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有着深入的应用, 队列的主要作用是消除高并发访问高峰,加快网站的响应速度. 在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同时也使得系统响应延迟加剧. 在使用队列后,用户的请求发给队列后立即返回, (例如: 当然不能直接给用户提示订单提交成功,京东上提示:您"您提交了订单,请等待系统确认"), 再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库. 由于

ASP.NET Web网站中App_Code文件夹的作用及使用场景

原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立Web Site项目,使用过的开发者都知道,如果需要新建一个类,例如DataBase.cs.此类只服务于web页面,不适于放入网站自身类库中,因此希望其独立存在于类库之外,只是用于在web应用程序中被web页面调用.这样一来此类最好不要通过形成dll文件,并将其放入bin文件夹以供web页面调用.但

Vuex的工作流程,以及它的作用,使用场景

vuex的工作流程: 1.在vue组件里面,通过dispatch来触发actions提交修改数据的操作. 2.然后再通过actions的commit来触发mutations来修改数据. 3.mutations接收到commit的请求,就会自动通过Mutate来修改state(数据中心里面的数据状态)里面的数据. 4.最后由store触发每一个调用它的组件的更新 Vuex的作用:项目数据状态的集中管理,复杂组件(如兄弟组件.远房亲戚组件)的数据通信问题. 原文地址:https://www.cnbl

hadoop-Combiner作用用法

文章来源http://blog.csdn.net/ipolaris/article/details/8723782 reduce的输入每个key所对应的value将是一大串1,但处理的文本很多时,这一串1已将占用很大的带宽,如果我们在map的输出给于reduce之前做一下合并或计算,那么传给reduce的数据就会少很多,减轻了网络压力.此时Combiner就排上用场了.我们现在本地把Map的输出做一个合并计算,把具有相同key的1做一个计算,然后再把此输出作为reduce的输入,这样传给redu

简述 gevent模块的作用和应用场景。

当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成, 再在适当的时候切换回来继续执行.由于IO操作非常耗时,经常使程序处于等待状态, 有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO. 由于切换是在IO操作时自动完成,所以gevent需要修改Python自带的一些标准库, 这一过程在启动时通过monkey patch完成: 原文地址:https://www.cnblogs.com/Rivend/p/1207