枚举的基础

1.Java enum的用法详解
用法一:常量
在JDK1.5 之前,我们定义常量都是: public static fianl.... 。
现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
public enum Color {
RED, GREEN, BLANK, YELLOW
}

用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;

public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
用法三:向枚举中添加方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

用法四:覆盖枚举的方法
例如:toString方法覆盖
用法五:实现接口
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
用法六:使用接口组织枚举
public interface Food {
enum Coffee implements Food {
BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
}
enum Dessert implements Food {
FRUIT, CAKE, GELATO
}
}
用法七:关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。
EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。

2.通常定义的常量方法和枚举定义常量方法区别
1. 代码:
public class State {
public static final int ON = 1;
public static final Int OFF= 0;
}
有什么不好了,大家都这样用了很长时间了,没什么问题啊。
首先,它不是类型安全的。你必须确保是int
其次,你还要确保它的范围是0和1
最后,很多时候你打印出来的时候,你只看到 1 和0 ,
但其没有看到代码的人并不知道你的企图,抛弃你所有旧的public static final常量
2.可以创建一个enum类,把它看做一个普通的类。除了它不能继承其他类了。(java是单继承,它已经继承了Enum类),
可以添加其他方法,覆盖它本身的方法
3.switch()参数可以使用enum了
4.values()方法是编译器插入到enum定义中的static方法,
所以,当你将enum实例向上转型为父类Enum是,values()就不可访问了。
解决办法:在Class中有一个getEnumConstants()方法,
所以即便Enum接口中没有values()方法,我们仍然可以通过Class对象取得所有的enum实例
5.无法从enum继承子类,如果需要扩展enum中的元素,在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组。
达到将枚举元素进行分组。
6.使用EnumSet代替标志,enum要求其成员都是唯一的,但是enum中不能删除添加的元素
7.EnumMap的key是enum,value是任何其他Object对象。
8.enum允许程序员为eunm实例编写方法。所以可以为每个enum实例赋予各自不同的行为。
9.使用enum的职责链(Chain of Responsibility) .这个关系到设计模式的职责链模式。以多种不同的方法来解决一个问题。
然后将他们链接在一起。当一个请求到来时,遍历这个链,直到链中的某个解决方案能够处理该请求。
10.使用enum的状态机
11.使用enum多路分发

时间: 2024-10-29 04:52:17

枚举的基础的相关文章

(二十二)枚举类型基础

public class Test { public static void main(String[] args) { //测试普通的枚举类型 System.out.println("SPRING的值="+season.SPRING); //遍历普通枚举类新 System.out.println("---遍历普通枚举类型---"); for(season str:season.values()){ System.out.println(str); } //遍历含有

C# 枚举

一.在学习枚举之前,首先来听听枚举的优点. 1.枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值. 2.枚举使代码更易于维护,有助于确保给变量指定合法的.期望的值. 3.枚举使代码更易输入. 二.枚举说明 1.简单枚举 枚举使用enum关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚举本身的修饰符仅能使用public和internal. 枚举是值类型,隐式继承自System.Enum,不能手动修改.System.Enum本身是引用类型,继承自S

Scala 枚举: Enumeration 概述

Spark Scala 枚举 * Java 中的那套枚举并不能直接使用到 Scala 中* Scala 中的枚举使用轻量级 Enumeration 进行实现* Scala 中的枚举其实是一个伴随对象* Scala 中的枚举没有方法重写功能* Scala 中的枚举其实都是 Enumeration.Value 这个对象 和Java和C++不同,Scala并没有枚举类型.不过,Spark标准类库提供了一个 Enumeration类型,可以用于生成枚举,定义一个枚举类的对象,并以Value方法调用枚举中

大话 函数指针 和 枚举这对鸳鸯

一:起因 (1)函数指针是指向函数的指针变量,即本质是一个指针变量,是一个指向函数(可能是代码区)的首地址的指针,正如我们都知道,数组名就是指向数组第一个元素的常量指针,对于一个函数而言,函数名也是指向函数第一条指令的常量指针.大话 回调函数 和 枚举 (2)而回调函数就是C语言里面对函数指针的高级应用,回调函数是一个通过函数指针调用的函数.如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数. 大话 函数指针 和 指针函数 (

C# 获取与解析枚举类型的 DescriptionAttribute

原文:C# 获取与解析枚举类型的 DescriptionAttribute System.ComponentModel.DescriptionAttribute 这个 Attribute,经常被用来为属性或事件提供说明,这个说明是可以被本地化的.在一些用户界面中,就可以利用这个 Attribute 提供一些额外的信息,就像 Visual Studio 中所做的,如图 1 所示: 图 1 可以看到,对 AutoSizeMode 的说明,被显示在了下面的框中. 但是,界面中的枚举项就没这么好的待遇了

C#中的枚举类型(enum type)

ylbtech 原文 C#中的枚举类型(enum type) 概念 枚举类型(enum type)是具有一组命名常量的独特的值类型.在以下示例中: enum Color { Red, Green, Blue } 声明一个名为 Color 的枚举类型,该类型具有三个成员:Red.Green 和 Blue. 枚举具体是怎么声明呢?枚举声明用于声明新的枚举类型.枚举声明以关键字 enum 开始,然后定义该枚举类型的名称.可访问性.基础类型和成员.具体格式: 修饰词(new.public.protect

.NET陷阱之六:从枚举值持久化带来大量空间消耗谈起

好长时间没有写博文了,今天继续. 这次跟大家分享的内容起因于对一个枚举值列表的序列化,下面简化后的代码即能重现.为了明确起见,我显式指定了枚举的基础类型. // 定义一个枚举类型. public enum SomeEnum :int { First, Second, Third, ... ... } // 重现问题的代码. var list = new List<SomeEnum>(); for (int i = 0; i < 1000; ++i) { list.Add((SomeEnu

看到导师的代码中枚举从0.1.2.4开始赋值,不解于是百度了一下

c#中枚举值为什么使用1,2,4,8,16,32等2的幂方 使用1,2,4,8,16,32等2的幂方,防止重复. .NET中的枚举我们一般有两种用法,一是表示唯一的元素序列,例如一周里的各天:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,例如: [Flags]  enum Styles{  ShowBorder = 1,         //是否显示边框 ShowCaption = 2,        //是否显示标题 ShowToolbox = 4  

C# 中的枚举类型 enum (属于值类型)

原文 C# 中的枚举类型 enum (属于值类型) C# 支持两种特殊的值类型:枚举和结构. 声明枚举:声明时要声明所有可能的值. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace enumType { enum Season // enum 类型定义在 class 外面 { Spring, Summer, Fall, Winter // 最后一个元素后面