既然String是final类,怎么能有通配符<?扩展字符串> 正确吗?

lik*_*udo 4 java

在 Spring Batch 的课程中​​,我很惊讶地看到? extends String. 由于 String 是最终类,这如何正确?

            public void write(List<? extends String> items) throws Exception {
                System.out.println(String.format("Received list of size: %s", items.size()));
                items.forEach(System.out::println);
            }
Run Code Online (Sandbox Code Playgroud)

Sil*_*olo 5

你是对的,永远不会有另一个类扩展String. 所以唯一可以填充它的类型?就是它String本身。然而,extends/super仍然传达意图。即aList<? extends String>是只读列表。您无法向其中添加元素,因为它? extends String是生产者。AList<String>可能是一个读写集合。因此,通过编写List<? extends String>,我们向正在阅读代码的人(以及编译器)传达我们只想从中读取List值,而不是写回任何内容。