`
不平凡的人
  • 浏览: 35206 次
  • 性别: Icon_minigender_1
  • 来自: 嘉峪关
社区版块
存档分类
最新评论

枚举类

 
阅读更多

本文介绍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的实例。

 

 

 

 

 

 

 

  • 大小: 34 KB
  • 大小: 35.4 KB
分享到:
评论

相关推荐

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    1. **获取枚举类**:要通过反射获取枚举类,首先需要得到其Class对象。这可以通过`Class.forName()`方法完成,提供枚举类的全限定名作为参数。 ```java Class&lt;Color&gt; colorClass = (Class) Class.forName(...

    枚举类实现单例,并且解决序列化给前端展示的问题.zip

    本源码由 springboot 开发,只有2个简单的文件(1是 枚举类单例,2是 controller请求测试类)。 主要测试了枚举类的饿汉式加载机制 / 单例机制。 代码中包含枚举类的基本使用,和完整的请求示例。 主要实现了枚举类...

    java枚举类的属性、方法和构造方法应用实战

    Java 枚举类的属性、方法和构造方法应用实战 Java 枚举类是一种特殊的类,它拥有自己的属性、方法和构造方法。本文将详细介绍 Java 枚举类的属性、方法和构造方法应用实战,结合实例形式分析了 Java 枚举类的定义、...

    Java手动方式创建枚举类示例

    Java手动方式创建枚举类示例 Java手动方式创建枚举类是一种常见的编程方法,在Java中可以使用枚举类型来定义一组具有相同特征的常量。通过手动方式创建枚举类,可以更好地控制枚举类型的行为和特性。在本文中,我们...

    enum枚举类的应用

    包含了关于枚举类的应用,以及枚举类和接口的组合应用,扩展映射关系。很有用的工具类。

    java枚举类用法

    下面我们将深入探讨Java枚举类的用法及其优势。 1. **枚举的声明与初始化** Java枚举的声明方式如下: ```java enum Color { RED, GREEN, BLUE } ``` 这里声明了一个名为Color的枚举类型,其中包含三个常量...

    常用的MIME TYPE类型枚举类Enum整理 静态方法直接检索使用

    全面覆盖:本枚举类内置了广泛使用的MIME类型,从常见的文本、图片、音频到视频格式,应有尽有。 智能检索:提供基于文件扩展名的MIME类型查询方法,只需一行代码即可获取,极大提升了开发效率。 易用性:采用枚举...

    enum枚举类的一些代码demo

    下面我们将深入探讨`enum`枚举类的使用方法,并通过具体的代码示例来加深理解。 1. **枚举的定义** 枚举类的定义通常以关键字`enum`开头,后跟枚举名,然后是大括号`{}`内的一系列枚举常量。例如,我们可以定义一...

    解析字符串转化为对象+code转desc+通过值实例枚举类+EnumUtil+PackageUtils工具类

    解析字符串转化为对象+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枚举类Java SE程序 Enum枚举类...

    56个民族枚举类

    标题中的“56个民族枚举类”指的是在编程中创建的一个枚举(Enumeration)类,用于表示中国56个不同的民族。枚举是面向对象编程中的一种数据类型,它允许我们定义一组有限的常量,这些常量代表了特定的值。在这个...

    java 枚举类总结

    ### Java 枚举类总结 #### 一、概述与基本概念 枚举类型(`enum`)是Java中的一种特殊类,它允许开发者定义一组命名的常量,并将其视为一个独立的类型。从JDK 1.5版本开始,Java引入了枚举类型,它提供了一种更加...

    全国各个省份对应代码枚举类

    比如110000是北京

    枚举类与注解.xmind

    自己总结的java枚举类和注解的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者

    通过枚举反向给实体类赋值

    此外,如果需要处理其他类型枚举的反向赋值,只需调用`EnumUtil.getByDescription`方法,并传入相应的枚举类即可。 总结起来,通过创建一个枚举工具类,我们可以实现从枚举的描述反向赋值给实体类,简化了处理表单...

    内部类和枚举类.rar

    内部类和枚举类在Java编程中是两个重要的高级特性,它们为代码设计提供了更丰富的结构和灵活性。本文将深入探讨这两个概念,并结合提供的压缩包文件`demo8`、`task03`和`demo7`中的实例进行解析。 ### 一、内部类 ...

    Java中的“枚举类型

    - **枚举类的可扩展性**:除了定义枚举元素外,还可以在枚举类中定义方法和字段。这使得枚举类本身成为一个非常有用的数据结构。 **3. 性能与可读性** - **性能优势**:枚举提供了`ordinal()`方法,该方法返回枚举...

    502.500.JAVA基础教程_枚举类与注解-使用enum关键字定义的枚举类实现接口(502).rar

    本教程将深入讲解如何使用`enum`关键字来定义枚举类,并探讨枚举类如何实现接口,以增强其功能。 首先,我们来看如何创建一个基本的枚举类。在Java中,枚举类的定义方式如下: ```java public enum Color { RED, ...

    498.496.JAVA基础教程_枚举类与注解-枚举类的理解(498).rar

    Java编程语言中的枚举类(Enumeration Class)是用于表示固定数量的常量集合,它提供了一种更加安全、规范的方式来处理常量。枚举在Java中是一个特殊的类,可以拥有方法和属性,使得代码更加清晰、易读。本教程将...

Global site tag (gtag.js) - Google Analytics