遗憾的是,Java泛型不可能实现这一点.如果Java允许更高阶的类型参数,那么可以将Map定义为:
public interface Map> { // here V<> is my hypothetical syntax for a
// type parameter which is itself generic...
V put(K key, V value);
...
}
而不是实际的java.util.Map:
public interface Map {
V put(K key, V value);
...
}
您可以看到问题是K为整个类声明了一次,而不是每次调用.put().
足够的幻想,你能做什么?我认为最好是创建一个Map< Set,Object>并将其包装为私人成员.然后你可以自由创建自己的put()和get(),它们考虑了类型之间的预期“关系”:
class SpecialMap {
private Map, Object> map = ...;
public
T put(Set key, T value) {
return (T) map.put(key, value);
}
public
T get(Set key) {
return (T) map.get(key);
}
}