Enum的简单了解

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中所有的枚举值,都是这个类静态常量。

 

可以使用==来比较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中定义自己的方法,必须在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;

	}

}


values()方法,可以得到enum中所有元素的数组。

 

 

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));

	}

}


如果你研究一下父类Enum,你会发现它并没有values()方法。

 

values()方法是由编译器添加的static方法。

参考文献:

《Thinking In Java》

http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html

http://softbeta.iteye.com/blog/1185573




 

你可能感兴趣的:(enum)