java的enum到底有什么用?

复杂用法: Java 为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象,看个下面的例子:WeekDay.java /** * @author admin * 2015-12-03 * 定义一个枚举类型,代表星期一到星期日的7个缩写常量 * 同时还定义了枚举类型的属性day,该属性可以是final,也可是...
java的enum到底有什么用?
简单的说,枚举就像是一个常量的集合,到时候只用其中一个值判断。
如:enum.winter
if(string.equals(enum.winter)){
System.out.println("winter");
}
else if(string.equals(enum.spring)){
System.out.println("spring");
}
在项目中都是 类似的用途
别的用途也有 不太熟 呵呵2009-12-21
枚举是一种规范它规范了参数的形式,这样就可以不用考虑类型的不匹配并且显式的替代了int型参数可能带来的模糊概念 枚举像一个类,又像一个数组。

Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。

1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。

2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。

3.Enum默认实现了java.lang.Comparable接口。

4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.

5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。

6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。

7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。

了解了这些基本特性,我们来看看如何使用它们。

1.遍历所有有枚举值. 知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。

for (Color c: Color.values())
System.out.println(“find value:” + c);

2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。

public enum Color {
Red,
Green,
Blue;

private static int number = Color.values().length ;

public static Color getRandomColor(){
long random = System.currentTimeMillis() % number;
switch ((int) random){
case 0:
return Color.Red;
case 1:
return Color.Green;
case 2:
return Color.Blue;
default : return Color.Red;
}
}
}

可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。

3.覆载(Override)toString, valueOf方法

前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。

….
public String toString(){
switch (this){
case Red:
return "Color.Red";
case Green:
return "Color.Green";
case Blue:
return "Color.Blue";
default:
return "Unknow Color";
}
}
….

这时我们可以看到,此时再用前面的遍历代码打印出来的是

Color.Red
Color.Green
Color.Blue

而不是

Red
Green
Blue.

可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。

4.使用构造函数

虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。还是用Color这个例子。

public enum Color {
Red("This is Red"),
Green("This is Green"),
Blue("This is Blue");

private String desc;

Color(String desc){
this.desc = desc;
}

public String getDesc(){
return this.desc;
}

}

这里我们为每一个颜色提供了一个说明信息, 然后定义了一个构造函数接受这个说明信息。

要注意这里构造函数不能为public或者protected, 从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。

5.实现特定的接口

我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。

6.定义枚举值自己的方法。

前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。

public enum Color {
Red {
public String toString(){
return "Color.Red";
}
},
Green {
public String toString(){
return "Color.Green";
}
},
Blue{
public String toString(){
return "Color.Blue";
}
};
}

从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。

总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂
在Java中,枚举类型本质上其实就是一个类,枚举中的常量都是该枚举类型的实例。虽然枚举类型有一些限制,比如不能再派生出子枚举类型,不能调用构造函数,不过我们仍然可以在枚举类型中定义构造函数、字段和方法2018-07-25
  1.关于 Java Enum
  Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals 。是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型,那时候一般用接口常量来替代。有了 JavaEnum 之后,可以更贴近的表示这种常量。
  2. 如何使用 Java Enum
  简单的用法: JavaEnum 简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:
//性别public enum SexEnum { male , female ; }//颜色public enum Color { RED , BLUE,GREEN,BLACK ; }  枚举对象里面的值都必须是唯一的。
  可以通过 Enum 类型名直接引用该常量,如 SexEnum.male,Color.RED.
  复杂用法: Java 为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象,看个下面的例子:
  WeekDay.java
/** * @author admin * 2015-12-03 * 定义一个枚举类型,代表星期一到星期日的7个缩写常量 * 同时还定义了枚举类型的属性day,该属性可以是final,也可是变量 * 同时还定义了该枚举类型的一个方法printDay */public enum WeekDay {Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri( "Friday"), Sat("Saturday"), Sun("Sunday");/**定义枚举类型自己的属性**/private final String day; private WeekDay(String day) { this.day = day;}/**定义枚举类型自己的方法**/public static void printDay(int i){ switch(i){ case 1: System.out.println(WeekDay.Mon); break; case 2: System.out.println(WeekDay.Tue);break; case 3: System.out.println(WeekDay.Wed);break; case 4: System.out.println(WeekDay.Thu);break; case 5: System.out.println(WeekDay.Fri);break; case 6: System.out.println(WeekDay.Sat);break; case 7: System.out.println(WeekDay.Sun);break; default:System.out.println("wrong number!"); }} public String getDay() { return day;}}WeekDayTest.java
/** * @author admin * 2015-12-03 * 测试枚举类型WeekDay. */public class WeekDayTest { public static void main(String args[]) { for (WeekDay day : WeekDay.values()) { System.out.println(day + "====>" + day.getDay()); } WeekDay.printDay(5); }}输出结果为:
Mon====>Monday
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday
Fri
2015-12-03
枚举一般是只取其中多个值中的一个值,如定义今天是星期几的枚举,共七个值。因为只能取其中一个,所以封装成枚举,使程序的意思简单易懂!2009-12-21
用法一:常量
在JDK1.5 之前,定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让代码可读性更强。
用法三:向枚举中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
用法四:覆盖枚举的方法
用法五:实现接口
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
用法六:使用接口组织枚举
用法七:关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。
用法一:常量
例子
public enum Color { RED, GREEN, BLANK, YELLOW }用法二:switch
例子
enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }用法三:向枚举中添加新方法
例子
public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.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; } }用法四:覆盖枚举的方法
例子
public class Test { public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 覆盖方法 @Override public String toString() { return this.index + "_" + this.name; } } public static void main(String[] args) { System.out.println(Color.RED.toString()); }}
用法五:实现接口
例子
public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 接口方法 @Override public String getInfo() { return this.name; } // 接口方法 @Override public void print() { System.out.println(this.index + ":" + this.name); } }用法六:使用接口组织枚举
例子
public interface Food { enum Coffee implements Food { BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO } enum Dessert implements Food { FRUIT, CAKE, GELATO } }2015-11-21
enum在java中称为“枚举”,用于定义存在少数变量的集合,使用方便。

jdk1.5引入了新的类型——枚举。在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。
public enum ColorEnum { red, green, yellow, blue;}参考:http://jingyan.baidu.com/article/e4d08ffdcf664d0fd2f60dbf.html
2015-11-21
枚举在很多基于枚举的数据结构设计中使用频繁,看下这个例子:

public class test {
private enum Seasons{
winter,
spring,
summer,
fall
}
public static void main(String[] args) {
System.out.println(Seasons.spring.ordinal());
}
}

你会得到枚举常量的序数,比如你数据库中有一个字段是type,类型因数据库而定,那mysql说是tinyint的话,你可以把这个枚举常量的序数储存,然后在和数据库进行交互的时候,用这个type进行穷举一些情况(不同的type不同的业务场景),类似这种你可以很轻松的一次搞定,然后在其他人查看代码的时候,也一样会清晰明了,比你直接写一个数字神马的清晰多了
不知道我的能不能帮到你,我在项目中是这么用的2012-07-02
枚举的关键是 所有可能的值都已列举出来了 只能设定该变量的值为已列举值之一,不可以赋值成列举外的值 你用String,以后数组可以被赋值成任何字符,而用枚举则保证只能是winter,spring,summer,fall四个列举出来的值。2012-07-30
枚举啊,就是常量2015-11-11
mengvlog 阅读 9 次 更新于 2025-07-19 15:40:44 我来答关注问题0
  • Java中的enum主要用于定义一组固定的常量。以下是enum在Java中的几个主要用途:定义有限集合的常量:对于某些数据,例如星期、月份、方向等,这些数据是固定的且有限的。使用enum可以方便地定义这些常量,避免使用大量的字符串常量或整数常量来表示,从而提高代码的可读性和可维护性。类型安全:使用enum定义的...

  •  翡希信息咨询 java中enum是什么意思?

    Java中的enum是一种特殊数据类型,用于在代码中定义有限个数的枚举常量。以下是关于Java中enum的详细解释:唯一性与类型安全:enum不允许具有相同值的枚举常量。这些常量的标识符在同一类型内是唯一的,为代码提供了类型安全的常量列表。主要用途:将相关数据项分组在一起,并以类型安全的方式在代码中引用它...

  •  唔哩头条 enum的用法和使用方法?

    ```java enum Days {Sat=1, Sun=2, Mon=3};```这里直接指定了各个天数的值。这样,在后续的代码中就可以直接使用这些具有特定意义的名称来代替数字。4. 枚举的作用和优点:使用枚举可以使代码更加可读、易维护。因为枚举常量是有意义的名称,而不是数字本身,所以它们增强了代码的可读性。此外,枚...

  • 2. 在Java中,枚举常用于替代魔法数(magic numbers)和硬编码的字符串。这不仅提高了代码的可读性,也使得维护和扩展更加容易。3. 枚举可以实现单例模式,因为枚举类型在Java中是final的,这意味着它们不能被继承,也不能被实例化,除了它们自己的枚举之外。4. 使用枚举可以提高性能,因为编译器可以将...

  • Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals 。是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型,那时候一般用接口常量来替代。有了 JavaEnum 之后,可以更贴近的表示这种...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部