鉴于:
import java.util.*;
public class Hancock {
//insert code here
list.add("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
在第5行独立插入的哪两个代码片段将在没有警告的情况下编译?(选择两个)
A. public void addString(List list) {
B. public void addString(List<String> list) {
C. public void addString(List<? super String> list) {
D. public void addString(List<? extends String> list) {
Run Code Online (Sandbox Code Playgroud)
正确答案是B&C.
答案A和B对我来说非常清楚.对于答案C&D我知道继承的方式,但是我无法理解为什么答案D不能在Eclipse中编译,而所有其他人都这样做(A有关于通用的警告,B&C没有warrings).
Eclipse中答案D的错误是The method add(capture#1-of ? extends String) in the type List<capture#1-of ? extends String> is not applicable for the arguments (String)
.
另一方面,这编译:
public void addString() {
List<? extends String> list1 = new ArrayList<String>();
List<? super …
Run Code Online (Sandbox Code Playgroud)