你可以用accessor方法做到這一點。
// only accessed by methods which check the keys and values are the right type.
final Map<Class, List<Class>> map = new LinkedHashMap<Class, List<Class>>();
public <T, S extends T> void add(Class<T> key, Class<S> value) {
List<Class> list = map.get(key);
if (list == null)
map.put(key, list = new ArrayList<Class>());
list.add(value);
}
public <T, S extends T> List<Class<S>>get(Class<T> key) {
return (List<Class<S>>) map.get(key);
}
public <T, S extends T> boolean contains(Class<T> key, Class<S> value) {
List<Class> list = map.get(key);
if (list == null) return false;
return list.contains(value);
}
public static void main(String... args) {
Main m = new Main();
m.add(Number.class, Integer.class); // compiles
m.add(Number.class, String.class); // does not compile.
}
+1。但是請注意,m.add(Number.class,Number.class);也編譯。 –
你是對的,在這種情況下,'extends'不一定是一個嚴格的子類。 –
你會如何用這種做事的方式來編碼獲得者? – Raveline