【问题标题】:Static variable in an abstract generic class抽象泛型类中的静态变量
【发布时间】:2012-01-02 03:54:27
【问题描述】:

我有一个叫做缓存的类。它是一个通用的、抽象的类,负责为永远类型扩展类处理全局缓存。我的问题是,如果我在基类下有一个静态变量,静态变量是每个扩展类型唯一的,还是对于所有扩展 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 是否会尝试存储它接收到的所有内容?

【问题讨论】:

    标签: java generics caching inheritance static


    【解决方案1】:

    我认为你做不到。来自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,您应该注意它与继承并不真正兼容。它也不适合经过良好测试的系统。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 2012-12-04
        • 2011-07-27
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        相关资源
        最近更新 更多