美文网首页
Java的枚举类型Enum

Java的枚举类型Enum

作者: 李2牛 | 来源:发表于2018-07-17 10:39 被阅读0次

    有这么一个场景,需要枚举HTTP的请求方法,这个时候最简单的处理方法是

    public class RequestTypeConstants {
        public static final int POST = 0; 
        public static final int HEAD = 1; 
        public static final int GET = 2; 
        public static final int PUT = 3; 
        public static final int UPDATE = 4; 
        public static final int DELETE = 5; 
        public static final int CONNECT = 6; 
        public static final int TRACE = 7;
    }
    

    这种定义常量的方式缺陷是

    1. 容易出错
      请求参数可能会被赋值一个毫无意义的常数,比如8
    2. 没有命名空间
      所有的HTTP请求方法必须通过类来访问
    3. 一致性差
      整型的枚举方法是编译期常量,编译完成之后,所有服务端和客户端引用的地方会将整型数值直接写入,如果这个常量枚举的类中的常量发生变化,所有的引用地方的代码都需要重新编译。
    4. 类型与实际的意义差距较大。
      调试期间直接看到数字,很难看出来具体指的是哪一个请求方法。

    使用枚举类

    
    public enum RequestTypeConstant {
        POST("POST"),
        GET("GET"),
        HEAD("HEAD"),
        PUT("PUT"),
        UPDATE("UPDATE"),
        DELETE("DELETE"),
        CONNECT("CONNECT"),
        TRACE("TRACE");
    
        private String string;
    
        RequestTypeConstant(String string) {
            this.string = string;
        }
    
        public String getString() {
            return string;
        }
    }
    

    使用枚举类型的优势

    1. 默认实现Comparable接口和Serializable接口
    2. 扩大switch语句的使用范围
    3. 可拓展性强,能够实现任意接口以及定义任何方法和属性

    避免错误使用枚举类型

    1. enum 类型不支持 public 和 protected 修饰符的构造方法,因此构造函数一定要是 private 或 friendly 的。也正因为如此,所以枚举对象是无法在程序中通过直接调用其构造方法来初始化的。
    2. 定义 enum 类型时候,如果是简单类型,那么最后一个枚举值后不用跟任何一个符号;但如果有定制方法,那么最后一个枚举值与后面代码要用分号;隔开,不能用逗号或空格。
    3. 由于 enum 类型的值实际上是通过运行期构造出对象来表示的,所以在 cluster 环境下,每个虚拟机都会构造出一个同义的枚举对象。因而在做比较操作时候就需要注意,如果直接通过使用等号 == 操作符,这些看似一样的枚举值一定不相等,因为这不是同一个对象实例。

    相关文章

      网友评论

          本文标题:Java的枚举类型Enum

          本文链接:https://www.haomeiwen.com/subject/dthwpftx.html