Enum可以将一组具名的有限集合创建成一种新的类型,而这些具名的值可以作为常规的程序组件使用。
在创建enum时,编译器会为你生成一个相关的类,这个类继承自java.lang.Enum,所以enum本身也是一个类。
package myenums; public enum Color { RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE }
package myenums; public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
可以使用==来比较enum实例,编译器会自动为你提供equals和hashCode方法。
package me.benzeph.myenums; import org.junit.Test; import static myenums.Color.BLUE; import static myenums.Color.RED; import static myenums.Day.MONDAY; import static myenums.Day.THURSDAY; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; public class MyEnumTest { @Test public void shouldReturnTrue() { assertFalse(MONDAY == THURSDAY); assertFalse(BLUE == RED); assertThat(BLUE, is(BLUE)); } }
如果打算在enum中定义自己的方法,必须在enum实例序列的最后添加一个分号,同时必须先定义一个enum实例(在方法之前)。
package myenums; public enum Color { RED("red"), ORANGE("orange"), YELLOW("yellow"), GREEN("green"), BLUE("blue"), PURPLE("purple"); String value; private Color(String value) { this.value = value; } public String getValue() { return value; } }在switch中使用enum,是enum提供的一个非常方便的功能。
package me.benzeph.myenums; import myenums.Color; import org.junit.Test; import static myenums.Color.*; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class MyEnumTest { @Test public void shouldReturnBlue() { assertThat(choose(BLUE), is("blue")); } private String choose(Color color) { String value; switch (color) { case RED: value = RED.getValue(); break; case GREEN: value = GREEN.getValue(); break; case BLUE: value = BLUE.getValue(); break; default: value = "colorful"; } return value; } }
package me.benzeph.myenums; import myenums.Color; import org.junit.Test; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class MyEnumTest { @Test public void shouldReturn6() { assertThat(Color.values().length, is(6)); } }
values()方法是由编译器添加的static方法。
参考文献:
《Thinking In Java》
http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html
http://softbeta.iteye.com/blog/1185573