Enum
구현 코드
package main;import java.util.HashMap;import java.util.Map;public enum SoundType {MUTE("mute", 1), PLAY("play", 2), STOP("stop", 3);private static final Map<String, SoundType> CODE_NAME;private static final Map<Integer, SoundType> CODE_ID;static {CODE_NAME = new HashMap<String, SoundType>();for (SoundType soundType : values()) {CODE_NAME.put(soundType.getDescription(), soundType);}CODE_ID = new HashMap<Integer, SoundType>();for (SoundType soundType : values()) {CODE_ID.put(soundType.val(), soundType);}}private int val;private String description;public static SoundType fromCodeName(String codeName) {return CODE_NAME.containsKey(codeName) ? CODE_NAME.get(codeName) : null;}public static SoundType fromCode(int code) {return CODE_ID.containsKey(code) ? CODE_ID.get(code) : null;}SoundType(String desc, int val) {this.description = desc;this.val = val;}public String getDescription() {return description;}public int val() {return val;}}
테스트코드
package test;import static org.junit.Assert.*;import org.junit.Test;import static org.hamcrest.CoreMatchers.*;import main.SoundType;public class SounTypeTest {@Testpublic void enumTest() {assertEquals("mute", SoundType.MUTE.getDescription());assertEquals("play", SoundType.PLAY.getDescription());assertEquals("stop", SoundType.STOP.getDescription());String[] enumKeys = {"mute", "play", "stop"};int i = 0;for (SoundType st : SoundType.values()) {assertEquals(enumKeys[i].toUpperCase(), st.name());assertEquals(enumKeys[i++], st.getDescription());}assertEquals("MUTE", SoundType.MUTE.name());assertEquals(1, SoundType.MUTE.val());assertEquals("MUTE", SoundType.valueOf("MUTE").toString());assertEquals("MUTE", SoundType.valueOf(SoundType.class, "MUTE").toString());assertEquals(3, SoundType.values().length);assertEquals(SoundType.MUTE, SoundType.fromCodeName("mute"));assertEquals(SoundType.PLAY, SoundType.fromCodeName("play"));assertEquals(SoundType.MUTE, SoundType.fromCode(1));assertEquals(SoundType.PLAY, SoundType.fromCode(2));assertEquals(SoundType.STOP, SoundType.fromCode(3));assertThat("1", is("1"));assertThat(SoundType.fromCode(1), is(SoundType.MUTE));assertThat(SoundType.fromCode(2), is(SoundType.PLAY));assertThat(SoundType.fromCode(4), nullValue());}}
댓글
댓글 쓰기