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枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...
随机推荐
- 浏览器差异性hack
1 js函数 很多人误以为数组 push 方法拼接字符串会比 += 快,要知道这仅仅是 IE6-8 的浏览器下. 实测表明现代浏览器使用 += 会比数组 push 方法快,而在 v8 引擎中,使用 + ...
- Java 1.0 类与对象
1.Java中main()的作用: a.测试真正的类 b.启动Java应用程序 2. Java程序只会让对象与对象交互 3.创建对象时存储在堆中,自动回收. 4.Java无全局变量 5.Java程序由 ...
- POJ 2313 Sequence#贪心
(- ̄▽ ̄)-* 找规律 //初始化为B[i]=A[i] //然后由V=|A[1]-B[1]|+|A[2]-B[2|+|A[3]-B[3]| // +|B[1]-B[2]|+|B[2]-B[3]| / ...
- Java 反射 Class对象
Java 反射 Class对象 @author ixenos 关键字:RTTI.动态绑定.动态加载.获得Class引用.泛型Class引用.newInstance的坑.JVM中的泛型类型信息 RTTI ...
- CentOS修复“OpenSSL Heartbleed漏洞”方法
转载 http://www.coolhots.net/article/229.shtml
- 从MySQL全库备份中恢复某个库和某张表【转】
从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [root@mha2 backup]#mysqldump -uroot -p123456 --default-character-set=u ...
- MyBatis 批量修改记录
<insert id="update" parameterType="java.util.List"> UPDATE setting SET con ...
- perl Socket接收超时设置
一般来说, IO::Socket::INET里的Timeout设置是对于conncet的 如果你想设置recv接收超时, 可以这样设置: usr Socket: ...... , )); #注意这里p ...
- Canvas基础讲义
今天先花点简单的篇幅和大家介绍下canvas. 1. 基本篇 1.1. 什么是 Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 H ...
- 【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity
这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.uti ...