namkyu
2/28/2014 - 1:23 AM

GenericMethodTest.java

package generic;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;

/**
 * @FileName : GenericMethodTest.java
 * @Project : test_project
 * @작성자 : nklee
 * @프로그램설명 :
 */
public class GenericMethodTest {

	private Map<String, Object> contextObjMap;

	@Before
	public void setup() {
		 contextObjMap = new HashMap<String, Object>();
		 contextObjMap.put("objA", new ObjA());
		 contextObjMap.put("objB", new ObjB());
		 contextObjMap.put("objC", new ObjC());
	}

	// ---------------------- 첫 번째 방법 ---------------------------------

	public ObjB getObj(String objKey) {
		return (ObjB) contextObjMap.get(objKey);
	}

	@Test
	public void test() {
		// objB 추출
		assertThat(getObj("objB"), is(instanceOf(ObjB.class)));
	}

	// ---------------------- 두 번째 방법 ---------------------------------

	@SuppressWarnings("unchecked")
	public <T> T getObj(String objKey, Class<T> type) {
		return (T) contextObjMap.get(objKey);
	}

	@Test
	public void genericMethodTest() {
		// objA 추출
		assertThat(getObj("objA", ObjA.class), is(instanceOf(ObjA.class)));
		// objB 추출
		assertThat(getObj("objB", ObjB.class), is(instanceOf(ObjB.class)));
		// objC 추출
		assertThat(getObj("objC", ObjC.class), is(instanceOf(ObjC.class)));
	}
}

class ObjA {

}

class ObjB {

}

class ObjC {

}