Java枚举
来源:互联网 发布:找出数组中重复的元素 编辑:程序博客网 时间:2024/06/10 06:45
(1)枚举类定义和API
public enum EnumTest{ SPRING,SUMMER,FALL,WINTER;}
- 枚举类可实现一个或多个接口,使用enum定义的枚举类默认继承java.lang.Enum,枚举类不能继承其他父类,Enum类继承自Object类;
- 使用enum定义非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类;
- 枚举类的构造器只能使用private修饰;
- 枚举类的实例必须在第一行显式列出,这些实例系统会自动使用public static final修饰;
values() 遍历整个枚举类int compareTo(E o) 比较此枚举与指定对象的顺序;String name() 返回此枚举常量的名称;int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零);static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。
for (EnumTest s : EnumTest.values()) { System.out.println(s);}//SPRING//SUMMER//FALL//WINTERSystem.out.println(EnumTest.SPRING.compareTo(EnumTest.FALL));//-2System.out.println(EnumTest.SPRING.name());//SPRINGSystem.out.println(EnumTest.SUMMER.ordinal());//1EnumTest enumTest = Enum.valueOf(EnumTest.class, "FALL");System.out.println(enumTest);//FALL
(2)枚举成员变量,方法和构造器
public enum EnumTest{ SPRING("春"),SUMMER("夏"),FALL("秋"),WINTER("冬"); //构造器私有(和实例对应) private EnumTest(String name) { this.name = name; } //属性和方法 private String name; public String getName(){ return name; } public void setName(){ this.name = name; }}
测试代码:
System.out.println(EnumTest.SPRING.getName());EnumTest enumTest = Enum.valueOf(EnumTest.class, "FALL");System.out.println(enumTest.getName());//春//秋
(3)枚举抽象方法和实现接口
(1)实现接口
public interface EnumInterface { public void test();}//(1)和普通类一样实现public enum EnumTest implements EnumInterface{ @Override public void test() { }}//(2)每个实例实现public enum EnumTest implements EnumInterface{ SPRING("春"){ @Override public void test() { } }, SUMMER("夏"){ @Override public void test() { } }, FALL("秋"){ @Override public void test() { } }, WINTER("冬"){ @Override public void test() { } };}
(2)抽象方法
public enum EnumTest implements EnumInterface{ //抽象方法实现方式 SPRING("春"){ @Override public void test() { } }, SUMMER("夏"){ @Override public void test() { } }, FALL("秋"){ @Override public void test() { } }, WINTER("冬"){ @Override public void test() { } }; public abstract void test();}
(4)EnumSet,EnumMap 的应用
//(1)EnumSet的使用 EnumSet<EnumTest> enumSet = EnumSet.allOf(EnumTest.class); for (EnumTest key : enumSet) { System.out.println(key); } //(2)EnumMap的使用 EnumMap<EnumTest, String> enumMap = new EnumMap<EnumTest, String>(EnumTest.class); enumMap.put(EnumTest.SPRING, "春"); enumMap.put(EnumTest.SUMMER, "夏"); enumMap.put(EnumTest.FALL, "秋"); enumMap.put(EnumTest.WINTER, "冬"); for (Iterator<Map.Entry<EnumTest, String>> item = enumMap.entrySet().iterator(); item.hasNext(); ) { Map.Entry<EnumTest, String> entry = item.next(); System.out.println(entry.getKey().name() + ":" + entry.getValue()); }//EnumSet结果SPRINGSUMMERFALLWINTER//EnumMap结果SPRING:春SUMMER:夏FALL:秋WINTER:冬
(5)原理分析
Enum经过编译和反编译之后:
public class com.example.enums.EnumTest extends java.lang.Enum{ public static final com.example.enums.EnumTest SPRING; public static final com.example.enums.EnumTest SUMMER; public static final com.example.enums.EnumTest FALL; public static final com.example.enums.EnumTest WINTER;}...
所以,实际上 enum 就是一个 class,只不过 java 编译器帮我们做了语法的解析和编译而已。
阅读全文
0 0
- JAVA 枚举
- java枚举
- java枚举
- Java 枚举
- Java 枚举
- Java 枚举
- java 枚举
- java 枚举
- java枚举
- java枚举
- java枚举
- java枚举
- Java枚举
- java枚举
- java 枚举
- java枚举
- Java枚举
- Java枚举
- libc-bin (2.23-0ubuntu9) 的触发器 ... 在处理时有错误发生: rsync E: Sub-process /usr/bin/dpkg returned an error c
- 采用JavaScript、AngularJS实现过滤器搜索、删除、添加、排序、常用过滤器
- 【迷你兔分享】数据恢复中的可逆与不可逆操作
- Java设计模式--工厂模式
- H5游戏开发引擎的基本使用
- Java枚举
- U3d [SerializeField]介绍
- Angular4_获取当前Url地址和获取Url传递的参数
- 利用Path实现酷炫的启动界面
- 常见音频编码格式解析
- OLAP最新技术前瞻
- OSSIM5.0 重要日志加入到知识库
- kickstart 常见错误[备忘]
- [mysql] 批量导入提示: Variable ‘character_set_client’ can’t be set to the value of ‘NULL