抽象泛型类中的静态变量

时间:2011-11-20 00:18:13

标签: java generics caching inheritance static

我有一个名为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);

Cache的静态变量需要哪种行为。 [get变量的目的是成为JobCache / PersonCache商店的单个公共入口点]每个类型(PersonCache,JobCache)是否都有自己的缓存存储,或者Cache会尝试存储它收到的所有内容吗?

2 个答案:

答案 0 :(得分:3)

我认为你不能那样做。来自Java Language Specification Sec. 8.1.2

  

在C的静态成员的声明中的任何地方引用类C的类型参数或嵌套在C中的任何类型声明的静态成员的声明是一个编译时错误。它是一个编译时 - 时间错误,用于引用C的静态初始值设定项中的类C的类型参数或嵌套在C中的任何类。

答案 1 :(得分:2)

private static Cache变量将一次存储在Cache类中,而不存储任何子类。

[creates a cache store on first load]的功能必须决定实例化哪个子类。此方法将是静态的,因此无法覆盖。

如果您要实现singleton pattern,您应该注意它与继承不兼容。它也不适用于经过良好测试的系统。