IT/Programming / / 2023. 4. 27. 09:26

<Effective Java> RULE 29 형안전 다형성 컨테이너를 쓰면 어떨지 따져보라

반응형

 

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

class FavoritesClass {
    Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>();
    
//    public  <T> void putFavorite(Class<? extends T> type, T instance) {
//        if(type == null) {
//            throw new NullPointerException("Type is NULL");
//        }
//        favorites.put(type, instance);
//    }
    
    /**
     * 
     * 동적 cast로 런타임 형 안전성 확보
     * 
     * @author    ismyeong
     * @writeday  2018. 1. 17.
     *
     */
    public  <T> void putFavorite(Class<? extends T> type, T instance) {
        if(type == null) {
            throw new NullPointerException("Type is NULL");
        }
        favorites.put(type, type.cast(instance));
    }

    /**
     * 
     * 동적 cast
     * 주어진 인자가 Class 객체가 나타내는 자료형의 객체인지 검사
     * true = 주어진객체 반환
     * false = ClassCastException
     * 
     * @author    ismyeong
     * @writeday  2018. 1. 17.
     *
     */
    public  <T> T getFavorite(Class<T> type) {
        return type.cast(favorites.get(type));
    }
}


public class Favorites{
    public static void main(String[] args) {
        FavoritesClass f = new FavoritesClass();
        f.putFavorite(String.class, "JAVA");
        f.putFavorite(Integer.class, 0xcafebabe);
        f.putFavorite(Class.class, FavoritesClass.class);
        
        String favoriteString = f.getFavorite(String.class);
        int favoriteInt = f.getFavorite(Integer.class);
        Class<?> favoriteClass = f.getFavorite(Class.class);
        
        System.out.println(favoriteString +" "+favoriteInt + " " + favoriteClass.getName());
                
    }
}
 
 

데이터베이스에 저장되는 레코드는 임의 개수의 열을 갖는데, 형 안전성을 깨지않으면서 각 열에 접근할 방법이 있다면 좋을 것이다.

컨테이너 대신 키를 형인자를 지정하는 것이며 컨테이너에 값을 넣거나 뺄 때마다 키를 제공하는 것이다.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유