제네릭과 컨테이너(Container)

이종 컨테이너(heterogeneous container)

public class Favorites {
		
		private Map<Class<?>, Object> favorites = new HashMap<>();
	
		public <T> void putFavorite(Class<T> type, T instance) {
				favorites.put(Objects.requireNonNull(type), instance);
		}
		
		public <T> T getFavorite(Class<T> type) {
				return type.cast(favorites.get(type));
		}
}

public class Main {
		public static void main(String[] args) {
				Favorites f = new Favorites();
				
				f.putFavorite(String.class, "Java");
				f.putFavorite(Integer.class, 12345);
				f.putFavorite(Class.class, Favorites.class);
				
				String str = f.getFavorite(String.class);
				int favoriteInteger = f.getFavorite(Integer.class);
				Class<?> favoriteClass = f.getFavorite(Class.class);
				
				System.out.println(str + " " + favoriteInteger + " " + favoriteClass);
		}
}

코드 분석

public class Favorites {
		
		private Map<Class<?>, Object> favorites = new HashMap<>();
	
		public <T> void putFavorite(Class<T> type, T instance) {
				favorites.put(Objects.requireNonNull(type), instance);
		}
		
		public <T> T getFavorite(Class<T> type) {
				return type.cast(favorites.get(type));
		}
}