オブジェクトキャッシュを作成しています。汎用のメソッドreturnタイプ( getCachedCMSObjectを参照)を作成するのに問題があるため、コメントに示されているようにreturnをキャストする必要はありません。私はそれと一緒に暮らすことができると思いますが、私はむしろジェネリックを使用したいと思います。
cachedCMSObjectは、「Heterogeneous Collection」パターンを使用する別個のオブジェクトですが、この場合は重要ではないと思います。また、私の問題とは関係ありません。
package util;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class CMSObjectCache {
static Map<String, CMSObject> cachedCMSObject = new ConcurrentHashMap<String, CMSObject>();
public static void putCachedCMSObject(String cmsKey, CMSObject cmsObject) {
cachedCMSObject.put(cmsKey, cmsObject);
}
public static Object getCachedCMSObject(String objectKey, Class<?> clazz) {
CMSObject c2 = cachedCMSObject.get(objectKey);
return c2.getCMSObject(Integer.class); // return generic type ?
}
public static void main(String[] args) {
CMSObject cmsObject;
// put object of type Integer with key "Int:3"
putCachedCMSObject("Int:3", new CMSObject(Integer.class, 3));
// Get that object from the cache
Integer i3 = (Integer) getCachedCMSObject("Int:3", Integer.class); // necessary?
System.out.println(i3);
}
}
これは、CMSObjectが(Blochから)どのように見えるかです。
package util;
import java.util.HashMap;
import java.util.Map;
public final class CMSObject {
private Map<Class<?>, Object> cmsObject = new HashMap<Class<?>, Object>();
public CMSObject() {
}
public <T> CMSObject(Class<T> type, T instance) {
this.putCMSObject(type, instance);
}
public <T> void putCMSObject(Class<T> type, T instance) {
if (type == null) {
throw new NullPointerException("Type is null");
}
cmsObject.put(type, instance);
}
public <T> T getCMSObject(Class<T> type) {
return type.cast(cmsObject.get(type));
}
}