`
zzc1684
  • 浏览: 1223176 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

java枚举类Enum方法简介(valueof,value,ordinal)

    博客分类:
  • Java
阅读更多

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;   

  /*   
  *定义一个变量表示枚举值的数目。   
  *(我有点奇怪为什么sun没有给enum直接提供一个size方法).   
  */   
  private   static   int   number   =   Color.values().length   ;   

  /**   
  *   随机返回一个枚举值   
  @return   a   random   enum   value.   
  */   
  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作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了。

分享到:
评论

相关推荐

    Java枚举类型Enum的用法

    在枚举内部,可以通过`Enum<E extends Enum<E>>`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...

    java enum 枚举 学习资料

    valueOf(String arg0) 方法是枚举类中的一个静态方法,它通过传入的 arg0 字符串解析出一个该枚举类的实例,其中传入的字符串必须是元素列表的名称之一,否则将抛出 java.lang.IllegalArgumentException 异常。...

    java枚举类型enum的使用

    在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来处理一组固定的数据集合。枚举中的每个元素都是该枚举类型的对象...

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

    Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方  enum Season { ...也是说,使用name()方法和valueOf(String)方法能够在枚举类型对象和字符串之间方便得转换。当然,假设valu

    Java中的“枚举类型

    - **隐含字段和方法**:枚举类内部包含了`values()`和`valueOf()`等方法。 #### 五、总结 通过本文的讨论可以看出,尽管使用`static final`字段也能实现某些枚举类型的功能,但枚举类型提供的类型安全、扩展性和...

    java enum枚举教程学习资料

    例如,对于`Color`枚举,我们可以使用`Color.values()`获取所有颜色的数组,`Color.valueOf("RED")`获取`RED`实例,`Color.RED.ordinal()`获取`RED`的顺序,即0。 枚举在Java中有很多应用场景,如定义权限级别、...

    一文搞懂JAVA 枚举(enum)

    values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中: * values() 返回枚举类中所有的值。 * ordinal() 方法可以找到每个枚举常量的索引,就像数组索引一样。 * valueOf() 方法返回指定字符串值的枚举...

    java枚举的一个实例

    此外,枚举类型不能被实例化,除非通过`values()`或`valueOf()`方法,这增加了代码的可控性。 在Java中,枚举还可以用于switch语句,提供了一种更安全的替代传统的if...else if...else结构。例如: ```java ...

    Java中的Enum的使用与分析

    枚举类型继承自`java.lang.Enum`,这意味着我们可以使用`Enum`类中定义的方法,如`name()`、`ordinal()`等。 #### 五、自定义枚举类 除了基本的定义方式外,还可以在枚举类型中定义方法和属性。例如: ```java ...

    列举java 枚举相关信息

    - **性能考虑**:虽然枚举类型提供了很多便利,但频繁使用`valueOf`和`values`方法可能会对性能产生一定影响。 - **枚举值的顺序**:枚举值的顺序是固定的,通常是按照定义的顺序排列,这种顺序可能会影响到某些逻辑...

    2021年JAVA枚举类型知识点.docx

    - `valueOf()`静态方法:根据名称创建枚举实例,如`Week.valueOf("SUN")`。 6. **枚举构造函数**: - 枚举构造函数是私有的,不允许有公共构造函数。 - 枚举构造函数在声明枚举实例时被调用,可以传递参数,如`...

    三分钟快速掌握Java中枚举(enum)

    6. `<T extends Enum<T>> T valueOf(Class<T> enumType, String name)`:根据枚举类型和名称获取对应的枚举值。 枚举的应用场景: 1. 替代一组常量,例如定义颜色: ```java public enum Color { RED, GREEN, ...

    spring boot 枚举使用的坑整理

    在 Java 中,枚举类型可以使用 enum 关键字来定义。 在 Spring Boot 应用程序中,枚举类型经常被用于定义一些固定的值,例如订单状态、用户角色等。然而,在使用枚举类型时,需要注意一些坑,否则可能会出现一些...

    javaenum学习.pdf

    - 所有的枚举类都隐式继承了`java.lang.Enum`类,因此可以使用`Enum`类提供的方法,如`ordinal()`和`compareTo()`。 - `ordinal()`返回枚举元素在枚举类中的索引,例如`Color.RED.ordinal()`返回0,`Color.BLUE....

    springboot项目中枚举类型的最佳实践

    return OrderStatus.valueOf(dbData); } } ``` 然后在实体类的字段上使用`@Convert`注解: ```java @Entity public class Order { @Convert(converter = OrderStatusConverter.class) private OrderStatus ...

    java枚举

    方法支持:** 枚举类型自动继承`java.lang.Enum`类,提供了`toString()`、`ordinal()`、`compareTo()`等方法,以及前面提到的`values()`和`valueOf()`方法。 **4. 可扩展性:** 枚举类型可以定义自己的方法和属性...

    Java枚举PPT教案学习.pptx

    可以使用`valueOf()`方法将字符串转换为对应的枚举类型,但需要注意,如果字符串与枚举元素不匹配,会抛出`IllegalArgumentException`。同时,枚举可以通过`.ordinal()`得到整数表示,通过`.name()`得到字符串表示。...

    java中枚举的详细使用介绍

    - `valueOf`:根据枚举名称字符串返回对应的枚举实例。 此外,枚举可以包含私有构造函数和方法,以便初始化枚举实例和实现特定的功能。例如: ```java public enum Gender { MALE("男"), FEMALE("女"); private...

    2022年掌握JDK1.5枚举类型Java教程.docx

    Java中的枚举类型(Enum)是在JDK 1.5版本中引入的一种特殊的类类型,它的设计目的是为了更好地管理和使用一组固定的常量。枚举在Java中提供了比传统的final常量更安全、更灵活的机制。以下是关于Java枚举类型的一些...

Global site tag (gtag.js) - Google Analytics