Chr*_*chi 2 java arraylist hashmap typesafe
我正在使用Hashmap作为我的内存缓存.基本上,这就是我所拥有的:
private static final Map<String, Object> lookup = new HashMap<String, Object>();
    public static Object get(CacheHelper key) {
        return lookup.get(key.getId());
    }
    public static void store(CacheHelper key, Object value) {
        lookup.put(key.getId(), value);
    }
没关系.但对于我从地图中"获取"的每个物体,我必须施放,这非常难看.我想把ArrayList和许多其他不同的东西放进去.
有人知道其他解决方案是类型安全的吗?
(当然,我可以为每种类型创建一个getter和setter,但这是唯一的解决方案吗?
那么,是否有更好的方法来创建内存缓存,或者有人知道如何将hashmap包装起来更安全吗?
解决此问题的一个方法是使您的CacheHelper类型具有通用性CacheHelper<T>.然后为地图创建一个包装器:
class MyCache {
  private final Map<CacheHelper<?>, Object> backingMap = new HashMap<>();
  public <T> void put(CacheHelper<T> key, T value) {
    backingMap.put(key, value);
  }
  @SuppressWarnings("unchecked")
  // as long as all entries are put in via put, the cast is safe
  public <T> T get(CacheHelper<T> key) {
    return (T) backingMap.get(key);
  }
}
Java编译器实际上在内部使用这种方法; 看这里.您不必传递显式Class对象,但您必须知道与每个键实际关联的类型,这与应该在行为良好的应用程序中应该相同.
| 归档时间: | 
 | 
| 查看次数: | 1456 次 | 
| 最近记录: |