本文介绍JAVA SE5中枚举的使用
一、概念
关键字enum可以将一组具名值的有限集合创建为一种新的类型,而这些具名可以作为常规的程序组件使用。
二、向枚举中添加新方法
1、示例
package net.oschina.tkj.chapter19.enumclass; /** * 枚举类中添加方法 注意:先定义枚举类实例,最后一个实例要用分号隔开 * name(),toString()方法返回枚举类实例名称,添加枚举类构造器可以返回额外信息 * * @author Freedom * */ public enum BallTeamEnum { LAKERS("洛杉矶湖人"), OKC("雷霆"), TOWN("勇士"), CAVS("骑士"); private String description; private BallTeamEnum(String description) { this.description = description; } public String getDesc() { return "BallTeamEnum:" + "name:" + name() + " " + description; } public static void main(String[] args) { for (BallTeamEnum ball : BallTeamEnum.values()) { System.out.println(ball.getDesc()); } } }
2、总结
①枚举类构造方法:每个枚举类都能够调用name(),toString()方法得到自身的描述(返回枚举类的实例名字)。可以提供一个构造器返回额外的信息;
②如果要自定义方法,枚举类的最后一个实例要用“;”分号结束。同时,必须要在定义枚举类的属性和方法之前,先定义枚举类的实例,否则编译器会报错;
③枚举中的方法和构造方法和普通类没有区别,除了有一些限制之外,enum就是一个普通的类。
三、枚举中的switch语句
1、代码示例
package net.oschina.tkj.chapter19.enumclass; import static net.oschina.tkj.chapter19.enumclass.BallTeamEnum.OKC; /** * switch在枚举类中的使用 * * @author Freedom * */ public class SwitchEnum { private BallTeamEnum team = OKC; public void change() { switch (team) { case LAKERS: team = BallTeamEnum.CAVS; break; case OKC: team = BallTeamEnum.TOWN; break; case TOWN: team = BallTeamEnum.LAKERS; break; case CAVS: team = BallTeamEnum.OKC; break; } System.out.println("Team:" + team.getDesc()); } public static void main(String[] args) { SwitchEnum switchE = new SwitchEnum(); for (int i = 0; i < 5; i++) { switchE.change(); } } }
2、总结
一般来说,JAVA SE5 switch语句只能使用数值,而枚举本身就具备次序,可以通过ordinal方法获取到其次序,因此可以在枚举类中使用switch。
四、枚举中的values方法
1、代码示例
package net.oschina.tkj.chapter19.valuesmethod; /** * 枚举类中的values方法 * * @author Freedom * */ public enum Explore { SOUTH, NORTH } package net.oschina.tkj.chapter19.valuesmethod; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.HashSet; import java.util.Set; /** * 利用反射机制了解枚举类中的values方法 * * @author Freedom * */ public class Reflection { public static Set<String> analyze(Class<?> enumClass) { System.out.println("analyze start..." + enumClass); System.out.println("Interface:"); for (Type t : enumClass.getGenericInterfaces()) { System.out.println(t); } System.out.println("parent class:" + enumClass.getSuperclass()); Set<String> set = new HashSet<>(); for (Method m : enumClass.getMethods()) { set.add(m.getName()); } System.out.println(set); System.out.println("analyze enum end...============"); System.out.println(); return set; } public static void main(String[] args) { Set<String> sonEnum = analyze(Explore.class); Set<String> parentEnum = analyze(Enum.class); System.out.println("sonEnum.contains(parentEnum) ?:" + sonEnum.containsAll(parentEnum)); sonEnum.removeAll(parentEnum); System.out.println("sonEnum remove parentEnum:" + sonEnum); } }
运行结果:
cmd中运行javap反编译指令结果:
2、总结
① javap运行的enum类中可以看出,枚举类为final类不能被继承同时该类有一个父类为Enum;
②枚举类中的实例都是static final为一个引用类型的常量,所以在定义枚举类实例的时候,符合编程规范的写法是将枚举类的实例定义为大写形式,多个字符用"_"分割;
③values方法为编译器添加的static方法。编译器同时还在子类中(自定义的枚举类)中添加了valueOf方法该方法只有一个参数,而父类Enum中也有valueOf方法为两个参数;
④上述方法
sonEnum.removeAll(parentEnum);
移除之后只剩下[values]方法。原因,这里的set集合值存储了方法的名字,而没有考虑方法的签名;
⑤因为 values方法为编译器添加的方法,所以,向上转型为Enum就不能访问values方法。但是,Class类中提供了getEnumConstants方法,因此,Enum类中没有valuesf方法,可以通过Class中的getEnumConstants()方法获取到Enum的实例。
相关推荐
1. **获取枚举类**:要通过反射获取枚举类,首先需要得到其Class对象。这可以通过`Class.forName()`方法完成,提供枚举类的全限定名作为参数。 ```java Class<Color> colorClass = (Class) Class.forName(...
本源码由 springboot 开发,只有2个简单的文件(1是 枚举类单例,2是 controller请求测试类)。 主要测试了枚举类的饿汉式加载机制 / 单例机制。 代码中包含枚举类的基本使用,和完整的请求示例。 主要实现了枚举类...
Java 枚举类的属性、方法和构造方法应用实战 Java 枚举类是一种特殊的类,它拥有自己的属性、方法和构造方法。本文将详细介绍 Java 枚举类的属性、方法和构造方法应用实战,结合实例形式分析了 Java 枚举类的定义、...
Java手动方式创建枚举类示例 Java手动方式创建枚举类是一种常见的编程方法,在Java中可以使用枚举类型来定义一组具有相同特征的常量。通过手动方式创建枚举类,可以更好地控制枚举类型的行为和特性。在本文中,我们...
包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。
下面我们将深入探讨Java枚举类的用法及其优势。 1. **枚举的声明与初始化** Java枚举的声明方式如下: ```java enum Color { RED, GREEN, BLUE } ``` 这里声明了一个名为Color的枚举类型,其中包含三个常量...
全面覆盖:本枚举类内置了广泛使用的MIME类型,从常见的文本、图片、音频到视频格式,应有尽有。 智能检索:提供基于文件扩展名的MIME类型查询方法,只需一行代码即可获取,极大提升了开发效率。 易用性:采用枚举...
下面我们将深入探讨`enum`枚举类的使用方法,并通过具体的代码示例来加深理解。 1. **枚举的定义** 枚举类的定义通常以关键字`enum`开头,后跟枚举名,然后是大括号`{}`内的一系列枚举常量。例如,我们可以定义一...
解析字符串转化为对象+code转desc+通过值实例枚举类+EnumUtil+PackageUtils工具类 ZipInputStream实现压缩文件的读取与数据转化的过程,利用反射实现根据枚举值获取枚举对象。
公司名称和编码枚举类
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
标题中的“56个民族枚举类”指的是在编程中创建的一个枚举(Enumeration)类,用于表示中国56个不同的民族。枚举是面向对象编程中的一种数据类型,它允许我们定义一组有限的常量,这些常量代表了特定的值。在这个...
### Java 枚举类总结 #### 一、概述与基本概念 枚举类型(`enum`)是Java中的一种特殊类,它允许开发者定义一组命名的常量,并将其视为一个独立的类型。从JDK 1.5版本开始,Java引入了枚举类型,它提供了一种更加...
比如110000是北京
自己总结的java枚举类和注解的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
此外,如果需要处理其他类型枚举的反向赋值,只需调用`EnumUtil.getByDescription`方法,并传入相应的枚举类即可。 总结起来,通过创建一个枚举工具类,我们可以实现从枚举的描述反向赋值给实体类,简化了处理表单...
内部类和枚举类在Java编程中是两个重要的高级特性,它们为代码设计提供了更丰富的结构和灵活性。本文将深入探讨这两个概念,并结合提供的压缩包文件`demo8`、`task03`和`demo7`中的实例进行解析。 ### 一、内部类 ...
- **枚举类的可扩展性**:除了定义枚举元素外,还可以在枚举类中定义方法和字段。这使得枚举类本身成为一个非常有用的数据结构。 **3. 性能与可读性** - **性能优势**:枚举提供了`ordinal()`方法,该方法返回枚举...
本教程将深入讲解如何使用`enum`关键字来定义枚举类,并探讨枚举类如何实现接口,以增强其功能。 首先,我们来看如何创建一个基本的枚举类。在Java中,枚举类的定义方式如下: ```java public enum Color { RED, ...
Java编程语言中的枚举类(Enumeration Class)是用于表示固定数量的常量集合,它提供了一种更加安全、规范的方式来处理常量。枚举在Java中是一个特殊的类,可以拥有方法和属性,使得代码更加清晰、易读。本教程将...