java的枚举是什么意思

介绍

这篇文章主要介绍“java的枚举是什么意思”,在日常操作中,相信很多人在java的枚举是什么意思问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“java的枚举是什么意思”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

<强>老虎中的一个重要新特性是枚举构造,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示.Tiger专家,developerWorks的多产作者Brett McLaughlin将解释枚举的定义,介绍如何在应用程序中运用枚举,以及它为什么能够让您抛弃所有旧的公共静态最终代码。

您已经知道,java代码的两个基本的构造块是类和接口。现在老虎又引入了枚举,一般简称它为枚举。这个新类型允许您表示特定的数据点,这些数据点只接受分配时预先定义的值集合。
当然,熟练的程序员可以用静态常量实现这项功能,如清单1所示:

清单1。公共静态最终

<>以前public  class  OldGrade  {public 才能;static  final  int  A =, 1;,, public  static  final  int  B =, 2,,, public  static  final  int  C =, 3;,, public  static  final  int  D =, 4,,, public  static  final  int  F =, 5;,, public  static  final  int  INCOMPLETE =, 6,,,}

说明:我要感谢啊# 39;赖利媒体公司,该公司允许在本文中使用我撰写的Java 1.5老虎:开发商# 39;s笔记本一书中“枚举”这一章中的代码示例(请参阅参考资料)。

然后您就可以让类接受像OldGrade。B这样的常量,但是在这样做的时候,请记住这类常量是Java中int类型的常量,这意味着该方法可以接受任何int类型的值,即使它和OldGrade中定的所有级别都不对应,因此,您需要检测上界和下界,在出现无效值的时候,可能还要包含一个IllegalArgumentException。而且,如果后来又添加另外一个级别(例如OldGrade。WITHDREW_PASSING),那么必须改变所有代码中的上界,才能接受这个新值。

换句话说,在使用这类带有整型常量的类时,该解决方案也许可行,但并不是非常有效。幸运的是,枚举提供了更好的方法。

定义枚举

清单2使用了一个可以提供与清单1相似的功能的枚举:

清单2。简单的枚举类型

 package  com.oreilly.tiger.ch03;,, public  enum  Grade ,, {,, A, B, C, D, F, INCOMPLETE ,}, 

在这里,我使用了新的关键字枚举,为enum提供了一个名称,并指定了允许的值。然后
,成绩就变成了一个枚举类型,您可以按清单3所示的方法使用它:

清单3。使用枚举类型

package com.oreilly.tiger.ch03;  public class Student {  private String firstName;  private String lastName;  private Grade grade;  public Student(String firstName, String lastName) {  this.firstName = firstName;  this.lastName = lastName;  }  public void setFirstName(String firstName) {  this.firstName = firstName;  }  public String getFirstName() {  return firstName;  }  public void setLastName(String lastName) {  this.lastName = lastName;  }  public String getLastName() {  return lastName;  }  public String getFullName() {  return new StringBuffer(firstName)  .append(" ")  .append(lastName)  .toString();  }  public void assignGrade(Grade grade) {  this.grade = grade;  }  public Grade getGrade() {  return grade;  }  }

用以前定义过的类型建立一个新的枚举(grade)之后,您就可以像使用其他成员变量一样使用它了。当然,枚举只能分配枚举值中的一个(例如,A、C 或 INCOMPLETE)。而且,在assignGrade() 中是没有进行错误检测的代码,也没有考虑边界情况,请注意这是如何做到。

使用枚举值

迄今为止,您所看到的示例都相当简单,但是枚举类型提供的东西远不止这些。您可以逐个遍历枚举值,也可以在 switch 语句中使用枚举值,枚举是非常有价值的。

遍历枚举值

下面我们用一个示例显示如何遍历枚举类型的值。清单 4 所示的这项技术,适用于调试、快速打印任务以及把枚举加载到集合(我很快将谈到)中的工具:

java的枚举是什么意思