Java 为什么是番石榴';s Cache.invalidate(对象键)方法不是泛型的?
发件人:Java 为什么是番石榴';s Cache.invalidate(对象键)方法不是泛型的?,java,caching,guava,Java,Caching,Guava,发件人: 是否有技术原因、历史原因或其他原因?原因与Map.remove采用对象参数相同,并对其进行了解释和说明 这个原因既不是技术原因,也不是历史原因:它只是……一个客观合理的原因。但是为什么缓存没有get(对象键)方法呢?:)因为Cache.get和LoadingCache.getUnchecked都会导致条目被添加到缓存中,所以它必须是K类型,原因与Map.put必须使用K类型的键相同。诚然,getIfPresent不接受对象——它强制其参数的类型为K——这可能是一个判断调用。(但是asM
是否有技术原因、历史原因或其他原因?原因与
Map.remove
采用对象参数相同,并对其进行了解释和说明
这个原因既不是技术原因,也不是历史原因:它只是……一个客观合理的原因。但是为什么缓存没有
get(对象键)
方法呢?:)因为Cache.get
和LoadingCache.getUnchecked
都会导致条目被添加到缓存中,所以它必须是K
类型,原因与Map.put
必须使用K
类型的键相同。诚然,getIfPresent
不接受对象
——它强制其参数的类型为K
——这可能是一个判断调用。(但是asMap().get
仍然接受一个对象
,并且它在功能上等同于getIfPresent
)是的,它们在某些地方符合Map
接口,但在其他地方却不符合。我对getIfPresent
的理由不太肯定,但我确实知道,这些API已经讨论和辩论了好几天了。
public interface Cache<K,V> extends Function<K,V> {
//...
void invalidate(Object key);
//...
}
void invalidate(K key);