【代码优化】使用enum代替int常量

经常带代码中看见这样的代码:

public static final int APP_START=1;

public static final int APP_PAUSE=0;

public static final int APP_STOP =2;

public static final int PLAY_START=1;

public static final int PLAY_PAUSE=0;

public static final int PLAY_STOP =2;

这种方法叫作int枚举模式,存在很多不足,但是经常被我们这样写。它在类型安全性和使用方便性没有任何帮助

如果将app_传到play_的方法中,编译器不会出现警告,还会用== 操作将app_和play_进行对比,甚至更糟糕:

int  i =(APP_START  - PLAY_START) / PLAY_START;

采用int 枚举是编译时常量,,如果与int常量相关的值发生变化,客户端只有通过再次编译,才会有效果。

怎么避免这种缺陷呢,在java1.5开始,提供了enum枚举方案:

public enum APP { START ,STOP ,PAUSE};

public enum PLAY{ START ,STOP ,PAUSE};

表面上看没什么两样,但是并非如此,java的枚举类型,是功能十分齐全的,java的枚举本质上还是int值。

枚举提供了编译时的类型安全,如果声明一个参数类型为App,就可以保证,被传到该参数上的任何非空对象一定

属于有效的app 3个属性之一,不会引用到play的属性。

包名同名的常量的多个枚举可以在一个系统中和平共处。因为每个类型都有自己的命名空间

比如app.start与play.start没有任何冲突。

枚举类型还允许添加任意的方法和域。可以利用适当的方法增强枚举类型,也可以作为枚举常量的集合

,随着时间的推移成为全功能的抽象

总之,与int 常量相比,枚举类型的优势不言而喻,枚举类型易读得多,也更加安全,更加强大。

【代码优化】使用enum代替int常量

时间: 2024-10-18 17:44:04

【代码优化】使用enum代替int常量的相关文章

第30条:用enum代替int常量

在java1.5之前,表示枚举类型的常用模式是声明一组具名的int常量,每个类型成员一个常量: public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE

Item 30 用enum代替int常量类型枚举,string常量类型枚举

1.用枚举类型替代int枚举类型和string枚举类型 public class Show { // Int枚举类型 // public static final int APPLE_FUJI = 0; // public static final int APPLE_PIPPIN = 1; // public static final int APPLE_GRANNY_SMITH = 2; public enum Apple { FUJI, PIPPIN, GRANNY_SMITH } pub

用枚举enum替代int常量

枚举的好处: 1. 类型安全性 2.使用方便性 public class EnumDemo { enum Color{ RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN(28); private int colorValue; private Color(int rv){ this.colorValue=rv; } private int getColorValue(){ return colorValue; } private int value(){ retu

第六章:枚举和注解。ITEM30:用enum代替int常量。&ITEM32:用EnumSet代替位域。&ITEM33:用EnumMap代替序数索引。

1 package com.twoslow.cha6; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public enum Operation { 7 8 PLUS("+") { 9 @Override 10 double apply(double x, double y) { 11 return x + y; 12 } 13 },MINUS("-") { 14 @Override 15 dou

总是容易忘记:enum、int、string之间的快速转换

public enum Color { Red=1, Green=2 } (1)Enum转换为String Color.Read.ToString() Convert.ToString(Color.Green) (2)Enum转换为int Convert.ToInt32(Color.Green) (a)String转换为Enum (Color)Enum.Parse(typeof(Color), "Red"); (b)Int转换为Num (Color)1 原文地址:https://www

JAVA enum与int的转换——转载

转自:http://blog.csdn.net/liranke/article/details/22751453 作者:langya2007 对于: enum Color { RED,BLUE,BLACK YELLOW,GREEN}; (1)  ordinal()方法: 返回枚举值在枚举类种的顺序.这个顺序根据枚举值声明的顺序而定.                   Color.RED.ordinal();  //返回结果:0                 Color.BLUE.ordina

6、使用enum来替代常量

如果没有枚举类,我们可能需要写很多的静态变量,例如: public static int APPLE = 1; public static int GRAPE = 2; 枚举类写法 enum Fruit{ APPLE(0), GRAPE(1); private int type; private Fruit(int type) { this.type = type; } public int getType() { return type; } public void setType(int t

u3d enum string int的互相转换

Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基类型是除 Char 外的任何整型,所以枚举类型的值是整型值. Enum 提供一些实用的静态方法: (1)比较枚举类的实例的方法 (2)将实例的值转换为其字符串表示形式的方法 (3)将数字的字符串表示形式转换为此类的实例的方法 (4)创建指定枚举和值的实例的方法. 举例:enum Colors { R

枚举Enum通过int值或文本转为对应的枚举类型

1.数值转枚举 如果枚举类型继承了数值类型,可以直接强制转换 public enum SourceType : byte { YC = 0, TS = 1, QK = 2, ZQ = 3 } //转换方式 int a=1; SourceType stype = (SourceType)a; 2.文本类型转枚举 SourceType stp = (SourceType)Enum.Parse(typeof(SourceType), "YC"); 原文地址:https://www.cnblo