java - 关于Java中通配符捕获的困惑
问题描述
我读过一篇关于通配符捕获如何在 java 中工作的文章。在本节中,作者说明了编译器如何捕获通配符类型并进行一些转换。
但是我的困惑是在编译了以下代码之后出现的(代码本身没有任何意义,我只是想测试java中的通配符捕获):
public class Test {
public static void main(String[] args) {
}
public static void copy(List<?> src, List<?> dest) {
for (int i = 0; i < dest.size(); i++) {
dest.set(i, src.get(i));
}
}
}
我得到一个编译时错误:
Error:(9, 32) java: incompatible types: java.lang.Object cannot be converted to capture#1 of ?
根据那篇文章,编译器应该能够捕获通配符类型src
并将其转换为类似List<capture#2>
但是为什么错误说的类型src.get(i)
是Object
,而不是类似的东西capture#2
?
如果那个帖子是错误的,通配符捕获实际上是如何工作的?
解决方案
我还没有查看链接,但我真的怀疑这与您在此处发布的内容相同...
实际上List<?> src
意味着您唯一可以从中检索的List
是一个Object
(除非您知道类型并且可以转换它,当然这可能会失败:)String s = (String) src.get(0);
。
这List<?> dest
意味着这个目的地实际上是只读的,因为?
意味着你可以添加任何东西,, String
,Integer
等等 - 当你添加不同的类型时你会破坏它的完整性,因此这是被禁止的。
推荐阅读
- hive - 小数点后的 Hive 数字
- azure-devops - Azure DevOps 分支策略:如何解决从 id 到用户的必需审查?
- python - python3.x importing gi... gi包的路径
- python - 如何在 Keras 中为多个序列 LSTM 准备输入数据?
- python - Tesseract OCR - 指定模式
- scala - 隐式添加到集合
- recaptcha - 如何强制 Google reCaptcha 显示挑战图像?
- python - Python在Windows中更改目录
- batch-file - 通过批处理文件比较两个文件夹的内容而不是两个文件的内容
- angular6 - 无法在 Reactive Forms 角度 6 中获取值 select2 多项选择