2011-11-20 49 views
2

我有一个名为cache的类。它是一个通用的抽象类,负责处理永久类型的全局缓存以扩展类。我的问题是,如果我在基类下有一个静态变量,那么这个静态变量对每个扩展类型来说都是唯一的,或者对于扩展Cache的所有类型来说都是一样的。抽象泛型类中的静态变量

例如接口:

Cache<K, V> 
    private static Cache<K, V> 
    [creates a cache store on first load] 
    static V get(K key); 

然后,我有一个实现类:

PersonCache extends Cache<String, Person> 
    void load(String person); 

JobCache extends Cache<Integer, Job> 
    void load(Integer key); 

哪些行为会从缓存的静态变量可以预期的。 [get变量的意图是成为JobCache/PersonCache存储的单个公共入口]每种类型(PersonCache,JobCache)都有自己的缓存存储区,还是Cache会尝试存储它接收的所有内容?

回答

3

I don “认为你能做到这一点从Java Language Specification Sec. 8.1.2

这是一个编译时错误指C类的类型参数在C静态成员或一个声明的声明的任何地方C中嵌套的任何类型声明的静态成员。在C的静态初始化程序或C中嵌套的任何类中引用类C的类型参数时发生编译时错误。

2

private static Cache变量将被存储一次Cache类,并没有任何子类。

你的[creates a cache store on first load]的功能必须决定实例化哪个子类。这个方法将是静态的,所以不能被覆盖。

如果您正在寻找执行singleton pattern,您应该注意它与继承不兼容。它也不适用于经过良好测试的系统。