enum定义枚举类型,java中的枚举类型的使用

enum定义枚举类型,java中的枚举类型的使用,Java枚举类型enum的详解及使用

本文主要介绍了Java枚举类型enum的详细说明以及所使用的相关资料。有需要的朋友可以参考一下。

Java枚举类型enum的详解及使用

最近和同事讨论问题的时候,同事突然提到为什么Java中定义的常量值是用public final静态类型而不是穆恩枚举类型定义的?以前我们都是用这个定义,很少用enum定义,所以没有注意。面对破门而入的问题,真的有点搞不清楚为什么会有这样的定义。既然不懂,那就花时间研究一下。

Java中的枚举类型是由关键字enum定义的,这是jdk1.5中的新类型。所有枚举类型都是从Enum类型继承的。为了理解枚举类型,建议您在jdk中打开Enum类并简单阅读一下。这个类中定义了许多受保护的方法,比如构造函数。如果要使用这些方法,我们可以在当前类中定义枚举类型。每种枚举类型都有自己的名称和顺序。当我们输出一个枚举类型时,我们将输入该枚举类型的名称。详情请参考下面的例子。

一、 通常定义常量方法

我们通常用public final static方法来定义以下代码:1表示红灯,3表示绿灯,2表示黄灯。

包com . csdn . myenum;

公共类灯{

/*红灯*/

public final static int RED=1;

/*绿灯*/

public final static int GREEN=3;

/*黄灯*/

public final static int YELLOW=2;

}

二、 枚举类型定义常量方法

枚举类型的简单定义方法如下。我们似乎不能定义每个枚举类型的值。例如,我们定义红灯、绿灯和黄灯的代码可能如下:

公共枚举灯{

红色、绿色、黄色;

}

我们只能显示红灯、绿灯、黄灯,不能显示具体数值。不要担心,由于枚举类型提供了一个构造函数,我们可以通过构造函数和重写toString方法来实现它。首先给Light枚举类型添加一个构造方法,然后通过构造函数把每个枚举类型的值传入对应的参数,同时重写toString方法,其中返回构造函数传入的参数。修改后的代码如下:

公共枚举灯{

//使用构造函数传递参数

红色(1),绿色(3),黄色(2);

//定义私有变量

private int nCode

//构造函数,枚举类型只能是私有的

专用灯(int _nCode) {

这个。nCode=_ nCode

}

@覆盖

公共字符串toString() {

返回String.valueOf ( this。nCode);

}

}

三、 完整示例代码

枚举类型的完整演示代码如下:

包com . csdn . myenum;

导入Java . util . enum map;

导入Java . util . enum set;

公共类LightTest {

//1.定义枚举类型

公共枚举灯{

//使用构造函数传递参数

红色(1),绿色(3),黄色(2);

//定义私有变量

private int nCode

//构造函数,枚举类型只能是私有的

专用灯(int _nCode) {

这个。nCode=_ nCode

}

@覆盖

公共字符串toString() {

返回String.valueOf ( this。nCode);

}

}

/**

* @param args

*/

公共静态void main(String[] args ) {

//1.遍历枚举类型

系统。出去。println('演示枚举类型的遍历.);

testTraversalEnum();

//2.演示EnumMap对象的使用

系统。出去。println('演示EnmuMap对象的使用和遍历.');

testEnumMap();

//3.演示EnmuSet的使用

系统。出去。println('演示EnmuSet对象的使用和遍历.');

testEnumSet();

}

/**

*演示枚举类型的遍历

*/

私有静态void testTraversalEnum() {

light[]all light=light . values();

for(Light Light:all Light){

系统。出去。println('当前灯名:' light . name());

系统。出去。println('当前灯序号:' aim . ordinal());

系统。出去。println('当前灯:'亮');

}

}

/**

*演示EnumMap的使用,它类似于HashMap的使用,只是键是枚举类型。

*/

私有静态void testEnumMap() {

//1.演示EnumMap对象的定义。EnumMap对象的构造函数需要传入参数,默认为key的类类型。

enummadride,String current map=new enummadride,String(

光。类);

Currmap.put (light.red,'红灯');

Enummap.put (light.green,'绿灯');

Currmap.put (light.yellow,'黄灯');

//2.遍历对象

for(Light Light:Light . values()){

系统。出去。println('[key=' light . name()',value='

current map . get(light)']');

}

}

/**

*演示如何使用EnumSet,它是一个抽象类,用于获取类型的枚举类型内容BR/

*您可以使用allOf方法。

*/

私有静态void testEnumSet() {

enum set Light current um set=enum set . allof(Light。类);

for(灯光对齐设置元素:当前设置){

系统。出去。println('当前EnumSet中的数据为:' aLightSetElement ');

}

}

}

执行结果如下:

演示枚举类型的遍历。

当前灯名:红色

当前灯序号:0

当前灯:1

当前灯名:绿色

当前灯序号:1

当前灯:3

当前灯名:黄色

当前灯序号:2

当前灯:2

演示EnmuMap对象的使用和遍历.

[键=红色,值=红灯]

[键=绿色,值=绿灯]

[键=黄色,值=黄灯]

演示EnmuSet对象的使用和遍历.

枚举集中的当前数据是:1

当前枚举集中的数据是:3

枚举集中的当前数据是:2

四。一般定义常数和枚举定义常数的区别。

以下可能比较无聊,但绝对值得一瞥。

1.代码:

公共类状态{

public static final int ON=1;

public static final Int OFF=0;

}

怎么了?大家都用这个很久了,没有问题。

首先,它不是类型安全的。你必须确定它是int

其次,你要确定它的范围是0和1。

最后,很多时候当你打印出来的时候,你只会看到1和0,

但是那些没有看到代码的人不知道你想做什么。扔掉所有旧的公共静态final常量。

2.您可以创建一个枚举类,并将其视为普通类。只是它不能继承其他类。(java是单继承,它继承了Enum),

您可以添加其他方法,覆盖它自己的方法。

3.switch()参数可以使用enum。

4.values()方法是由编译器插入到Enum定义中的静态方法。因此,当您将枚举实例向上转换为父类枚举时,values()是不可访问的。解决方案:类中有一个getenumConstants()方法,所以即使Enum接口中没有values()方法,我们仍然可以通过类对象获取所有的Enum实例。

5.不能从enum继承子类。如果需要在接口内扩展enum中的元素,请创建一个实现接口的枚举来对元素进行分组。对枚举的元素进行分组。

6.使用EnumSet代替标志。枚举要求其所有成员都是唯一的,但不能在枚举中删除添加的元素。

7.enummap的键是enum,值是任何其他Object对象。

8.enum允许程序员为eunm实例编写方法。因此,每个枚举实例可以被赋予不同的行为。

9.使用enum的责任链。这是与设计模式相关的责任链模式。用许多不同的方法解决一个问题。然后将它们连接在一起。当请求到来时,遍历链,直到链中的解决方案可以处理该请求。

10.使用枚举的状态机

11.使用枚举多路复用

感谢您的阅读,希望能帮到您,也感谢您对本站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: