2011. 11. 10. 15:21
반응형

Object와 Object[]는 엄연히 다른 타입이다.
그러므로 Method overoading 이 가능하다.
public void test(Object t);
public void test(Object[] t);
각각 제대로 동작한다.

그런데 아래와 같은 경우도 제대로 동작한다.
Object t1 = new Object();
Object t2 = new Object();
Object test1  = new Object[]{t1, t2};

또한 아래와 같은 경우도 제대로 동작한다.
Map<String, Object>map = new HashMap<String, Object>();
map.put("test", request.getParameterValues("test"));

그러나 캐스팅은 불가하다.
아래는 Object를 Object[]로 형변환을 시도해 봤다.
Object test1  = new Object();
Object[] test2  = (Object[])test1;                                  // 에러 (반대로 해봐도 에러!)


Object 라는것은 java의 최상위 Class라는 개념과..
모든 Class는 배열 형태로 존재할수 있다라는 개념사이의 짬뽕으로 인한 오류인것 같다.
그래서 String으로 테스트한 결과 역시 안되는 것을 확인했다.
Map<String, String> map = new HashMap<String, String>();
map.put("test", new String[]{"t1", "t2"});                          // 에러

그렇다면 Object와 Object[]를 어떻게 구분할 수 있을까?
똑똑한 Sun은 이미 구분하는 모듈을 만들어 놓았다.

test.getClass().isArray() 로 구분하면 된다.
이 외의 방법은 아무리 생각해도 답이 없었다.

반응형

'Java' 카테고리의 다른 글

goo.gl api java 구현  (0) 2016.10.06
bit.ly api java 구현  (0) 2016.10.06
base64, DES chiper - encode, decode 구현  (6) 2011.10.11
jdbc로 procedure call sample  (2) 2011.08.05
이종 db간 데이터 처리를 위한 프로젝트  (1) 2011.04.04
Posted by seongsland