你能不能把 T 用作全局变量

Can you not use T as a global variable

我有以下内容:

public class foo {
public static Request<T> request;

public void doSomething()
{
 request = getRequest();
}
}

但是编译器说它 cannot Resolve Symbol T

然而这是有效的:(即 T 被定义并构建。)

public class foo{   

 public void doSomething()
 {
  Request<T> request = getRequest();
 }
}

我是不是漏掉了一些简单的东西?

请求是一个存在于解决方案中的publicclass。为了兴趣Google凌空class

getRequest() 是 returns 一个 Request<T>

的函数

真实代码:

 public class Network {
 //Used to get Last Request
 public static Request<T> previousRequest;

 ...

 public <T> void addToRequestQueue(Request<T> req) {
    req.setRetryPolicy(new DefaultRetryPolicy(30000, 1, 2));
    try {
        req.getHeaders().put("Authorization", "Bearer " + getToken());
    } catch (AuthFailureError e) {
        e.printStackTrace();
    }
    Log.d(TAG, PrintRequest(req));
    previousRequest = req;     <<<<<<<<<<<<******* incomparable Types error
    getRequestQueue().add(req);
}

...

}

addToRequest 编译,因为您正在定义一个泛型方法。方法定义的语法(将 <T> 放在结果类型之前)告诉编译器您正在定义通用方法。此语法 定义 T,以便您可以在方法的其余部分使用它。同样,public class SomeClass<T>定义了T,所以你可以在class的其余部分使用它。但是其他语法没有定义通用参数,包括这个:

public static Request<T> previousRequest;

这不是泛型变量的定义(没有泛型变量),因此它没有定义T。因此,T 必须在别处定义。在您的示例中,事实并非如此。 (为泛型方法 addToRequestQueue 定义的 T 仅为该方法定义,并且 previousRequest 在方法外部声明。)