Lol*_*lly 5 java arrays generics collections
我有一个关于将泛型与集合一起使用的问题.
ArrayList<Integer> al=new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
我们知道上面的行意味着ArrayList al仅限于只保留整数.因此,以下行给出了编译错误:
al.add("wwww");
Run Code Online (Sandbox Code Playgroud)
但是我不明白下面这行是什么意思,
ArrayList al=new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
在ArrayList<Integer>宣布时我们不在左侧给出的地方.现在,以下行不会出现编译错误:
al.add("wwww");
Run Code Online (Sandbox Code Playgroud)
所以,如果我宣布像
ArrayList al=new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
这意味着a1可以接受任何类型?
这两个声明有什么区别?
后一个声明(没有泛型类型)已过时并已弃用.您不应该使用它,它仅为向后兼容性而编译.现代IDE将在此处生成警告.
另请注意,Java仅在编译时强制执行泛型类型,因此从技术上讲,您可以向具有一些额外强制转换的集合添加不正确的类型.这就是为什么最好始终保持泛型并不绕过它们.
使用此代码:
ArrayList al = new ArrayList<Integer>();
a1.add("www");
Run Code Online (Sandbox Code Playgroud)
编译器将生成一个警告(你应该注意!)但代码将运行没有错误.问题来自于从中提取数据a1.如果您"知道"它包含Integer值,您可以这样做:
Integer val = (Integer) a1.get(index);
Run Code Online (Sandbox Code Playgroud)
但是当你击中"www"元素时,你会得到一个ClassCastException.泛型用于将这些错误移动到编译时,而不是强迫可怜的开发人员追踪String值在该Integer数组列表中的结果.
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |