本章目标
掌握enum关键字与Enum类的关系
了解Enum类中提供的常用方法
Enum
从前面已经清楚的知道,使用enum关键字可以定义一个枚举,实际上此关键字表示的是java.lang.Enum类型,即:使用enum声明的枚举类型,就相当于定义一个类,而此类则默认继承java.lang.Enum类。java.lang.Enum类的定义如下:
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, java.io.Serializable
枚举类的主要操作方法
有如下的枚举类
public enum Color {//定义枚举类型 RED,GREEN,BLUE;//定义枚举的 3 个类型 }
取得枚举的信息
在枚举类建立完成之后,实际上都会为其调用枚举类中的构造方法,为其赋值,在Enum类的构造方法中的第一个参数name就是定义的枚举的名称,第二个参数ordinal则会从0开始依次进行编号。之后可以使用Enum类中提供的name()和ordinal()方法取得名字和编号。
验证name()和ordinal()方法
public class GetEnumInfo { public static void main(String[] args) { for(Color c : Color.values()){//枚举.values() 表示得到全部枚举的内容 System.out.println(c.ordinal() +" --> "+c.name()); } } /* 结果: * 0 --> RED * 1 --> GREEN * 2 --> BLUE * */ }
为枚举类的每一个对象赋值
可以通过构造方法和setter方法两种方式为枚举中的每个属性赋值:
——每个枚举类中都有其指定好的若干对象,当然,每一个枚举对象中也可以包含多个属性。而这些属性也可以通过构造方法为其赋值。
——以上是通过构造方法的方式为属性赋值的,当然也可以通过调用setter()的方式为指定的属性赋值,但是这样一来就必须明确好每一个枚举类的对象,如果操作的对象是RED,则名字应该为“红色”,如果操作的对象是GREEN,则名字应该为“绿色”等。
通过构造方法为属性赋值
enum Color{ RED("红色"),GREEN("绿色"),BLUE("蓝色");//定义枚举的 3 个类型 private String name;//定义 name 属性 private Color(String name) {//定义构造方法 this.name = name;//设置名字 } public String getName() {//取得 name 属性 return name; } public void setName(String name) {//设置 name 属性 this.name = name; } } public class ConstrutorEnum { public static void main(String[] args) { for(Color c : Color.values()){//枚举.values() 表示得到全部枚举的内容 System.out.println(c.ordinal() +" --> "+c.name()+"("+c.getName()+")");//输出 } } /* 结果: * 0 --> RED(红色) * 1 --> GREEN(绿色) * 2 --> BLUE(蓝色) * */ }
通过setter方法为属性赋值
enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 private String name;//定义 name 属性 public String getName() { return name; } public void setName(String name) { switch(this){ case RED:{//判断是否是红色 if("红色".equals(name)){ this.name = name;//设置名称 }else{ System.out.println("设置内容错误。"); } break; } case GREEN:{//判断是否是绿色 if("绿色".equals(name)){ this.name = name;//设置名称 }else{ System.out.println("设置内容错误。"); } break; } case BLUE:{//判断是否是蓝色 if("蓝色".equals(name)){ this.name = name;//设置名称 }else{ System.out.println("设置内容错误。"); } break; } } } } public class SetEnum { public static void main(String[] args) { Color c = Color.BLUE; c.setName("兰色");//设置一个错误的名字 c.setName("蓝色");//设置一个正确的名字 System.out.println(c.getName()); } /* 结果: * 设置内容错误。 * 蓝色 * */ }
valueof()
如果不想通过“枚举类.对象”的形式取得每一个枚举类的对象,也可以使用Enum类定义的“枚举类.valueof()”方法的形式进行调用。
使用vlaueof()方法找到一个枚举对象
public class ValueOfDemo { public static void main(String[] args) { Color c = Enum.valueOf(Color.class, "BLUE"); c.setName("兰色");//设置一个错误的名字 c.setName("蓝色");//设置一个正确的名字 System.out.println(c.getName()); } /* 结果: * 0 --> RED * 1 --> GREEN * 2 --> BLUE * */ }
使用比较器
在Enum类的定义中已经实现好了Comparable接口,所以枚举类的内容本身是可以进行排序的,下面通过TreeSet演示枚举的排序操作。
在类集部分曾经介绍过TreeSet可以直接进行排序,排序的规则是通过Comparable接口完成的。
验证枚举比较器
import java.util.Iterator; import java.util.Set; import java.util.TreeSet; enum Color{ RED,GREEN,BLUE;//定义枚举的 3 个类型 } public class ComparableEnum { public static void main(String[] args) { Set<Color> t = new TreeSet<Color>();//只能加入 Color 类型 t.add(Color.GREEN);//增加绿色的枚举对象 t.add(Color.BLUE);//增加蓝色的枚举对象 t.add(Color.RED);//增加红色的枚举对象 Iterator<Color> iter = t.iterator();//使用迭代输出 while(iter.hasNext()){ System.out.print(iter.next()+"、"); } } /* 结果: * RED、GREEN、BLUE、 * */ }
相关推荐
选项Swift软件包,用于更强大的Enum类型。 目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将...
常见的enum类型重定义的解决方法,清晰明了。
简单介绍了DNS和ENUM的原理及在IMS网络中的使用
enum枚举的方法
C++中枚举类型(enum)
opc enum 32_64安装包
Enum.doc Enum.docEnum.doc Enum.doc Enum.doc Enum.doc Enum.doc Enum.doc Enum.doc
用于枚举磁盘设备的 Enumdisk 示例
一个分析 enum 结构分析 源码资源
php-enum, PHP Enum实现灵感来自 SplEnum PHP enum 实现来自 SplEnum 为什么?首先,SplEnum 并不集成到PHP中,你必须单独安装它。使用 enum 而不是类常量提供了以下优点:你可以键入提示: function setAction(Ac
java enum详细教程。由浅入深,包括基本语法方面..很适合新手学习。/n各位看官。绝对超值。
enum.docx ,详细介绍了enum的用法,枚举用法在c#中比较常见,希望会有帮助哦
资源分类:Python库 所属语言:Python 资源全名:enum34-1.1.3-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
c#遍历枚举(ENUM)类型的方法,简单实用,适合c#初学者
Java enum的用法详解,可作为开发api
WPF中如何在XAML里绑定Enum的例子
博文“Java 语言中 Enum 类型的使用介绍”的源码。
C#与C调用C++,非托管,含struct调用及enum公用,完整项目,可直接编译或运行。 项目将所有工程的输出统一到Debug。 vs2015+Framework4.6,注意工程的配置。 所有东西自写,只是出于样例参考的作用,所以代码规范...
Laravel开发-enum PHP的枚举实现
simple_enum, 支持ActiveModel的简单 enum ( 包括验证和 i18n ) SimpleEnum 对于ActiveRecord和 ruby,低调的枚举像字段一样,给ActiveRecord和Mongoid模型( 为 Rails 4 构建) 带来了枚举功能。从 2.0版本开始,...