반응형
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());
}
}
데이터베이스에 저장되는 레코드는 임의 개수의 열을 갖는데, 형 안전성을 깨지않으면서 각 열에 접근할 방법이 있다면 좋을 것이다.
컨테이너 대신 키를 형인자를 지정하는 것이며 컨테이너에 값을 넣거나 뺄 때마다 키를 제공하는 것이다.
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 27 가능하면 제네릭 메서드로 만들 것 (0) | 2023.04.27 |
---|---|
<Effective Java> RULE 28 한정적 와일드카드를 써서 API 유연성을 높여라 (0) | 2023.04.27 |
<Effective Java> RULE 30 int상수 대신 enum을 사용하라 (0) | 2023.04.27 |
<Effective Java> RULE 31 ordinal 대신 객체 필드를 사용하라 (0) | 2023.04.27 |
<Effective Java> RULE 32 비트필드 대신 EnumSet을 사용하라 (0) | 2023.04.27 |