这是一种常见的怪癖。没有干净的溶液。基本上,只要你有类似的东西
<T> T get(Class<T>)
你是注定的。这是不可能的
List<String> s = get(List.class)
很容易。
你需要在某个地方投射并抑制警告。在你的情况下,我可能会这样做:
public CacheManager(Class<Dao> clazz, Class<Pojo> _clazz_pojo) {
Class<List<Pojo>> valueClass = cast(List.class);
_cache = cacheManager.getCache(_clazz_pojo.getName(), String.class, valueClass);
if(_cache == null){
_cache = cacheManager.createCache(_clazz_pojo.getName(),
CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, valueClass,
ResourcePoolsBuilder.heap(10)));
}
// ...
}
@SuppressWarnings("unchecked")
private <T, V> Class<V> cast(Class<T> t) {
return (Class<V>) t;
}