如何在缓存接口的简单缓存实现中使用泛型?

时间:2013-04-23 22:54:19

标签: java generics caching type-safety

public interface Cache<T>{
    public void put(String key,T value);
    public Object get(Object key);
}

public class CacheImpl<T> implements Cache {
    private static Object monitor = new Object();
    private static CacheImpl instance;
    private Map<String, T> cache = Collections.synchronizedMap(new HashMap<String, T>());

}

在上面的代码中,我必须使用泛型进行类型安全检查,但在实现的类中出现错误。

2 个答案:

答案 0 :(得分:3)

您的实现类尚未在接口中实现任何声明的方法!

接口是契约,实现类承诺支持接口中的方法。您需要为接口中声明的方法添加实现。

您还需要在implements子句中包含泛型类型参数:

public class CacheImpl<T> implements Cache<T> {

    public void put(String key,T value) {
      // Method body
    }

    public Object get(Object key){
      // Method body

      return someObject;
    }

    // Other methods
}

答案 1 :(得分:0)

具有双重检查和泛型参数的Singleton可以处理如下, 其中Cache Impl是我的Cache实现

public static CacheImpl<?> getInstance(Class<?> ofClass) {
        if (instance == null) {
            synchronized (CacheImpl.class) {
                instance = new CacheImpl<Object>(ofClass);
            }
        }
        return instance;
    }