Re: nested generic HashMap problem
Chris Riesbeck wrote:
I've looked at the Java generics tutorial, Langer's FAQ, and similar
online pages, but I'm still don't see what, if anything, I can do to
make the last line (marked with the comment) compile, other than do a
typecast and suppress the unchecked warning. Am I asking the impossible
or missing the obvious?
Possibly. I've run into this before, that you basically can't use ? at
all for retrieving values of a type other than object, so you're going
to get a warning there no matter what you do.
If I follow your logic correctly, I think you can add a type parameter
to Cache, and that will allow you to use T instead of ? as a type
parameter for the hash map. Take a gander at the following and see if
it matches what you want to do:
package test;
import java.util.HashMap;
public class Demo<T> {
private Class<T> base;
private Cache<T> cache;
Demo(Class<T> b, Cache c) { base = b; cache = c; }
Class<T> getBaseClass() { return base; }
T get(long id) { return cache.get(this, id); }
}
class Cache<T> {
private HashMap<Class<T>, HashMap<Long, T>> maps
= new HashMap<Class<T>, HashMap<Long, T>>();
public T get(Demo<T> demo, long id) {
return getMap(demo).get(id);
}
public void add(Demo<T> demo) {
maps.put(demo.getBaseClass(), new HashMap<Long, T>());
}
private HashMap<Long, T> getMap(Demo<T> demo) {
return maps.get(demo.getBaseClass());
}
}