相关疑难解决方法(0)

差异为<?方法和变量声明中的super/extends String>

鉴于:

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)

java generics collections extends super

10
推荐指数
1
解决办法
4615
查看次数

标签 统计

collections ×1

extends ×1

generics ×1

java ×1

super ×1