Enum 枚举基础
1 定义一个枚举
enum Weekend {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
2 得到每个枚举值
for (Weekend weekend : Weekend.values())
3 返回枚举在集合中顺序(从0开始)
public final int ordinal() {
return ordinal;
}
4 当前枚举名字
public final String name() {
return name;
}
5 根据名字返回相应的enum实例
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum constant " + enumType.getCanonicalName() + "." + name);
}
6 枚举不能被继承(下面的代码报错,提示不能从final的test.Weekday继承)
enum WeekendSon extends Weekend {
}
7 定义enum构造函数
enum Step { // Instances must be defined first, before methods:
First("this is the first step"),
Second("this is the second step"),
Third("this is the third step"),
Fourth("this is the fourth step");
private String description;
public String getDescription() {
return description;
}
Step(String description) {
this.description = description;
}
}
public class AppTest {
public static void main(String[] args) {
for (Step step : Step.values()) {
System.out.println(step + ":" + step.getDescription());
}
}
}
输出结果:
First:this is the first step Second:this is the second step Third:this is the third step Fourth:this is the fourth step
8 实例一枚
State接口:
public interface State {
int getCode();
String getDesc();
State nameOf(String var1);
}
LifeState枚举:
public enum LifeState implements State {
babyState(0, "儿童状态"),
youngState(1, "年轻状态"),
adultState(2, "成年状态"),
oldState(3, "老年状态");
private int code;
private String desc;
private LifeState(int code, String desc) {
this.code = code;
this.desc = desc;
}
@Override
public int getCode() {
return this.code;
}
@Override
public String getDesc() {
return this.desc;
}
@Override
public State nameOf(String name) {
return valueOf(name);
}
public static LifeState codeOf(int code) {
LifeState[] arr = values();
for(int i = 0; i < arr.length; i++) {
if(arr[i].code == code) {
return arr[i];
}
}
return null;
}
}
Test测试类:
public class Test {
public static void main(String[] args) {
LifeState lifeState = LifeState.babyState;
System.out.println(lifeState + "---" + lifeState.getCode() + "---" + lifeState.getDesc());
State babyState = lifeState.nameOf("youngState"); //调用valueOf,返回相应的枚举实例
System.out.println(babyState + "---" + babyState.getCode() + "---" + babyState.getDesc());
System.out.println(LifeState.codeOf(3).getDesc());
System.out.println(LifeState.youngState.name());
}
}
运行结果:
babyState---0---儿童状态 youngState---1---年轻状态 老年状态 youngState
Enum 枚举基础的更多相关文章
- 1.0 基础、标示符、常量、数据类型(enum 枚举,struct 结构体)、操作符、循环、数组
一.程序 现实生活中,程序是指完成某些事务的一种既定方法和过程,可以把程序看成是一系列动作执行过程的描述. 在计算机世界,程序是指令,即为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集 ...
- Swift Enum 枚举
前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ...
- JDK源码学习笔记——Enum枚举使用及原理
一.为什么使用枚举 什么时候应该使用枚举呢?每当需要一组固定的常量的时候,如一周的天数.一年四季等.或者是在我们编译前就知道其包含的所有值的集合. 利用 public final static 完全可 ...
- Enum 枚举类
目录 Enum 枚举类 基础 定义与用途 基本方法 示例 进阶 实现原理 枚举与Class对象 自定义枚举类和构造方法及toString() Enum中使用抽象方法来实现枚举实例的多态性 Enum与接 ...
- .net框架 - Enum枚举
概要 在C#或C++,java等一些计算机编程语言中,枚举类型是一种基本数据类型而不是构造数据类型. 在C语言等计算机编程语言中,它是一种构造数据类型. 它用于声明一组命名的常数,当一个变量有几种可能 ...
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
- C#将Enum枚举映射到文本字符串
介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...
- MVC3不能正确识别JSON中的Enum枚举值
一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...
- 161208、Java enum 枚举还可以这么用
在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...
随机推荐
- spring slf4j log4j maven
参考:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/overview.html <depen ...
- mysql 数据列按照逗号转成行
前言: 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果 ...
- 关于 plsql连接oracle数据库的问题
因电脑没有 安装oracle服务器端,所以安装plsql后还是不能连接oracle数据库,网上下载一个oracle客户端工具,是绿色免安装的,解压就好.我放我云盘了. instantclient_11 ...
- 接口post +json +bean
public ReturnBean<DealBean> getMember(String tagtype, String tag) { try { String requestUrl = ...
- MMS model
- ASP.NET中的Excel操作(NPOI方式)
代码准备: 一:实体准备 代码如下: /// <summary> /// 一个能添加到将要导出到指定行的实体类型规范 /// data:{int StartColIndex ? 0, in ...
- Python字符串连接方式
python中有很多字符串连接方式,总结一下: 1 最原始的字符串连接方式:str1 + str22 python 新字符串连接语法:str1, str23 奇怪的字符串方式:str1 str24 % ...
- .net 2.0 后台多线程
System.Threading.Thread thread1 = new System.Threading.Thread(delegate() { Web.BLL.banpaiconfig.Vide ...
- 初试LIBSVM
在做Kinect手势识别项目的时候用到了SVM这个东西.原理上不甚了解,但是用起来感觉还是很神奇的. 度娘百科:支持向量机SVM(Support Vector Machine)作为一种可训练的机器学习 ...
- window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法
生成execl时遇到的问题: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 ...