`
fantaxy025025
  • 浏览: 1328656 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

状态常量爆炸-掌握java枚举类型(enum type)-代码一个也没有少

 
阅读更多

状态常量爆炸-java枚举类型(enum type)-代码一个也没有少

 

最近程序的状态常量太多了,而且跨平台跨语言的多个项目,导致状态常量值到处都是。雷,迟早得炸了。

 

实际使用还是有问题

 

状态值,在Java项目里,很多这么搞:

    public static final int BOOK_STATUS_NOT_AUDIT = 0;
    public static final int BOOK_STATUS_AUDITING = 1;
    public static final int BOOK_STATUS_PASS_AUDIT = 2;

    private static Map<Integer, String> bookStatusDescMap = new HashMap<Integer, String>();
    static {
        bookStatusDescMap.put(BOOK_STATUS_NOT_AUDIT, "未审核");
        bookStatusDescMap.put(BOOK_STATUS_AUDITING, "审核中");
        bookStatusDescMap.put(BOOK_STATUS_PASS_AUDIT, "已通过");
    }

    /**
     * Get description of book status
     * @param bookStatus
     * @return
     */
    public static String getBookStatusDesc(int bookStatus){
        return bookStatusDescMap.get(bookStatus);
    }

 

这种状态值太多的,与语言没有关系。

ruby程序里也一样:

  D_ATTRIBUTES_REBATE_FREE = 1
  D_ATTRIBUTES_XXX = 2
  D_ATTRIBUTES_MIDAUTUMN = 3
  Status_Invalid = 0
  Status_Valid = 1
  Status_Deleted = 2

  

java中,求助java的枚举,仍然有的问题:

多语言沟通的话,基本这些状态都是字符串和数字,而一般不会直接给出一个java枚举常量来。web开发中,和浏览器的请求打交道,也就只能得到字符串和数字了。

这时就会有个问题,根据一个数字,怎么知道java程序里面,对应哪个枚举常量。

之后才能根据此枚举常量,调用其方法,得到其描述等信息。

封装一下处理方法:

 

    public static String getSeasonDesc(int seasonCode){
        return getSeason(seasonCode).getDesc();
    }

    public static Season getSeason(int seasonCode){
        for (Season season : Season.values()) {
            if(season.getCode() == seasonCode){
                return season;
            }
        }
        return Season.SPRING;
    }
 

 

这么下来以后,从直观性,易读性,沟通性(得让那些不懂java的同学知道很容易知道我的状态设置情况并容易copy一段代码),来看,还不如直接用最“原始”的办法。

 

所以,最终我还是选择用“最原始”的方式。

 

Java枚举中的一些细节,下面那篇文章也讲到了,但有一些细节,再补充一下。

# 代码一个也没有少

  只不过是封装了一下,在java中使得编译器不能识别 magic-number 了。

# 枚举中的ordinal()方法

public final int ordinal()

Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial constant is assigned an ordinal of zero). Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data structures, such as java.util.EnumSet and java.util.EnumMap.

这个是final方法的,给java系统自己用的,不能改,不该用。

# 枚举的常量,最后居然可以不用分号结尾! 

# 枚举常量即构造函数 

 

其他使用情况可以参考: http://blog.csdn.net/congqingbin/article/details/7520137

本文参考阅读:http://free9277.iteye.com/blog/1842880

 

+、+

===

----

+。+

 

 

分享到:
评论

相关推荐

    Java枚举类型Enum的用法

    枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将深入探讨Java枚举类型的使用方法及其相关知识点。 1. **枚举的声明与初始化** 枚举类型的声明方式类似于类,但以`enum...

    高阶Java-Java枚举类型 enum 应用详解

    在Java编程语言中,枚举(enum)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int类型的硬编码值更安全、更具可读性。本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用...

    全面掌握java枚举类型(enum-type)1

    全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...

    Java ---- enum --- 枚举类案例

    Java ---- enum --- 枚举类案例

    Java中的枚举类型Enum示例源代码

    每个枚举常量都是`Color`类的一个实例,它们自动地继承自`java.lang.Enum`类。 枚举类型的常量可以直接通过名字来引用,无需创建实例,例如: ```java Color color = Color.RED; ``` 枚举类型可以有构造函数,但...

    java枚举类型enum的使用

    ### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...

    Java枚举(enum)类型深度解析:特性、用法与最佳实践

    在Java中,枚举(enum)类型是一种特殊的类,它定义了一组有限的常量。枚举类型提供了一种更清晰、更安全的方式来处理一组固定的常量值。本文将深入探讨Java枚举类型的特点、用法以及最佳实践。 Java中的枚举类型是...

    Java 实例 - Enum(枚举)构造函数及方法的使用源代码-详细教程.zip

    在Java编程语言中,枚举(Enum)是一种特殊的类,用于定义一组固定的常量。...通过下载提供的"Java 实例 - Enum(枚举)构造函数及方法的使用源代码-详细教程.zip"资源,你可以进一步实践和掌握枚举的相关知识。

    java枚举实例代码

    Java枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的是为了更好地管理和使用常量,提高代码的可读性和安全性。在本实例代码中,...

    Java SE程序 Enum枚举类

    Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...

    java enum 枚举 学习资料

    "Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊...Java Enum 枚举学习资料提供了一个详细的教程,涵盖了枚举语法、枚举类的特点、枚举类中的方法等方面的知识点,适合新手学习和实践。

    简单总结java枚举类型

    枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用。以下是关于Java枚举类型的详细解释和相关知识点: 1. 定义枚举: 在Java中,枚举通过关键字`enum`来定义。例如,创建...

    Java中怎样由枚举常量的ordinal值获得枚举常量对象

    Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方  enum Season {  SPRING, SUMMER, AUTUMN, WINTER  }  定义了一个季节枚举类型。  在本例中,对于Season.SPRING这个...

    理解java枚举类型

    上述代码定义了一个名为`Color`的枚举,包含了三个常量:RED、GREEN和BLUE。枚举成员默认为public static final,可以直接通过枚举名访问,如`Color.RED`。 二、枚举的构造函数 枚举可以有自己的构造函数,用于初始...

    java 枚举(enum) 详解(学习资料)

    Java 枚举(enum)是 Java 语言中的一个重要特性,自 Java 5 开始引入。枚举用于定义一组相关的常量,这些常量通常代表一个有限的、预定义的值集合。枚举类是一种特殊的类,它具有以下特点: 1. **枚举类的声明**:...

    java枚举类型说明

    下面通过一个具体的例子来说明如何使用Java枚举类型: ```java public enum Grade { A, B, C, D, F, INCOMPLETE; public String getDescription() { switch (this) { case A: return "优秀"; case B: ...

    Java中的“枚举类型

    ### Java中的“枚举类型”知识点详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种特殊的类,其设计初衷是为了更好地处理...理解并熟练掌握枚举类型的使用,能够帮助开发者编写出更加清晰、可维护的代码。

    Java枚举类型enum的详解及使用

    Java 枚举类型 enum 是 Java 语言中的一种特殊的数据类型,自从 JDK 1.5 引入枚举类型以来,它已经成为了 Java 程序员中的一种常用工具。本文将对 Java 枚举类型 enum 进行详解,并介绍其使用方法。 一、枚举类型的...

    java枚举类型优秀源代码

    - **成员变量**:枚举类型中的每个成员都是一个实例,可以直接通过枚举类型名访问。 - **方法**:枚举可以像普通类一样包含方法,包括构造器、实例方法和静态方法。 - **自动实现接口**:枚举类型会自动实现`java....

    Java枚举类型.pdf

    总结起来,Java枚举类型是一个强大的工具,它可以替代`static final`常量来表示一组固定的值,提供类型安全、易于维护的代码。通过枚举,我们可以更方便地管理常量,减少错误,并增加代码的灵活性。枚举是Java中一个...

Global site tag (gtag.js) - Google Analytics