我有一个代码,有趣的是当我尝试运行main时,Intellij在make进程中抱怨(当运行javac时,而不是jit):
public class Foo {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String restEndPointUrl = "";
Integer userId = 0;
ResponseEntity<? extends ArrayList<Foo>> responseEntity =
restTemplate.getForEntity(restEndPointUrl, (Class<? extends ArrayList<Foo>>) ArrayList.class, userId);
}
}
其中getForEntity
有签名:
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... urlVariables)
错误:
Error:(77, 94) java: inconvertible types
required: java.lang.Class<? extends java.util.ArrayList<Foo>>
found: java.lang.Class<java.util.ArrayList>
java版本:1.7.0_60 实际上我想问的是与intellij无关,但它与java编译有关。有人可以清楚地解释背后的规则吗?
代码取自here。
我也看了this但是它并没有告诉我很多关于泛型和类型转换工作背后的逻辑。
此外,我应该(或可以)将? extends ArrayList<Foo>
或? super ArrayList<Foo>
类似的表达式替换为ArrayList<Foo>
,同时尝试解决那些很可能存在于java中的问题认证考试?当然要学习&#34;为什么&#34;将帮助我学习我应该采取的一些方法。