2011년 11월 30일 수요일

Java 캐스트 vs 어댑터

 http://www.eclipsezone.com/articles/what-is-iadaptable/


List list = new ArrayList();
list.add("data");       // this is OK, list is valid
list.ensureCapacity(4); // this is not, ensureCapacity() is ArrayList only 
/* You can even test for this dynamically at runtime using list instanceof ArrayList. */

 Cast 사용시 Adapter 사용시
Object o = new ArrayList();
List list = (List)o;
IAdaptable adaptable = new ArrayList();
List list = (List)adaptable.getAdapter(java.util.List.class);



- 아래 예처럼 HashMap를 List로 바꿀 수 있음
IAdaptable adaptable = new HashMap();
List list = (List)adaptable.getAdapter(java.util.List.class);
- 대신 IAdaptable 인터페이스 구현이 필요함
public class HashMap implements IAdaptable {
  public Object getAdapter(Class clazz) {
    if (clazz == java.util.List.class) {
      List list = new ArrayList(this.size());
      list.addAll(this.values());
      return list;
    }
    return null;
  }
  // ...
}

- UI와 딸린 데이터간에 Adapter를 사용할 수 있음

댓글 없음:

댓글 쓰기