你能不能把 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
在方法外部声明。)
我有以下内容:
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
在方法外部声明。)