我有以下内容:
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();
}
}
我在这里错过了一些简单的东西吗?
请求是解决方案中存在的公共类。出于兴趣,它是Google排球类。
getRequest()
是一个返回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);
}
...
}
答案 0 :(得分:1)
addToRequest
将编译,因为您正在定义一个通用方法。方法定义的语法(在结果类型之前放置<T>
)告诉编译器您正在定义泛型方法。此语法定义 T
,以便您可以在方法的其余部分中使用它。同样,public class SomeClass<T>
定义 T
,因此您可以在课程的其余部分中使用它。但是其他语法没有定义泛型参数,包括这个:
public static Request<T> previousRequest;
这不是泛型变量的定义(没有这样的东西),因此它没有定义T
。因此,必须在其他地方定义T
。在你的例子中,它不是。 (为通用方法T
定义的addToRequestQueue
仅为该方法定义,并且在方法外声明previousRequest
。)