小编典典

通用扩展不能添加相同的类型

java

我是这些泛型类型的新手。在下面的代码中,我创建了一个方法,该方法接受扩展了“字符串”的项目列表。

我的问题?-当列表可以分配一个新列表时,为什么不能添加字符串“ test” …这给了我一个编译错误。

public class Child {
    public void takeList(List<? extends String> list){
        list = new ArrayList<String>();
        list.add("test");
    }
}

阅读 226

收藏
2020-11-30

共1个答案

小编典典

因为与此处无关的不是运行时类型。list仍然是类型List<? extends String>,您刚巧将其分配给new ArrayList<String>()。考虑一下:

list = rand() ? new ArrayList<String>() : new ArrayList<NotString>();

编译器无法确定其是否list.add("test")有效-它仅基于的编译时类型进行决策list

请注意,实际上没有任何扩展String,这是一个final类。

2020-11-30