使用与嵌套类具有相同泛型的静态嵌套类

时间:2018-07-20 01:34:42

标签: java generics

我有这样的设置:

public final class RequestContext<T extends Cache> {
     T roleSpecificCache;

     public static final class Spec implements Supplier<RequestContext> {
          private Spec() {

          }

          T roleSpecificCache; // << Getting error here
     }

     private RequestContext(Spec b) {
        this.roleSpecificCache = b.roleSpecificCache; // << I want to do this
     }
   }

但是在T roleSpecificCache行中,出现以下错误 :

RequestContext.this cannot be referenced from a static context

了解我收到此错误的原因(即两个类之间没有直接联系),但不知道如何解决。我希望能够做最后的事情。

此外,我无法使Spec处于非静态状态(无法控制)。

1 个答案:

答案 0 :(得分:2)

您需要参数化Spec

public final class RequestContext<T extends Cache> {
     T roleSpecificCache;

     public static final class Spec<T extends Cache>
     implements Supplier<RequestContext<T>> {
          private Spec() {
          }

          T roleSpecificCache;
     }

    private RequestContext(Spec<T> b) {
        this.roleSpecificCache = b.roleSpecificCache;
    }
}

由于raw type argument to Supplier, which should be avoided,似乎应该以这种方式开始。