ArrayList声明从java版本1 修改为另一个ArrayList.修改声明的优点是什么.
例如:这里我提到了各种版本的Java支持的三种声明.我在Eclipse中设置了Java Compilance leve 1.4
 ArrayList val=new ArrayList();//Supported at 1.4  
 ArrayList<String> val=new ArrayList<String>();//Syntax error, parameterized types are only available if source level is 1.5 or greater 
 ArrayList<String> val=new ArrayList< >();//operator is not allowed for source level below 1.7
这只是一个持续改进的过程.
最初,Java没有泛型,所以你必须在你的问题中使用第一个表单.在ArrayList没有携带它包含什么样的物体的信息; 他们只是Object.涉及很多铸造,例如:
ArrayList list = new ArrayList();
list.add(new Thing());
// ...
Thing t = (Thing)list.get(0);
// Blech--^^^^^^^
所以Java得到了泛型,我们可以说它ArrayList包含1:
ArrayList<Thing> list = new ArrayList<Thing>();
list.add(new Thing());
// ...
Thing t = list.get(0);
//        ^--- No cast! :-)
但请注意冗余,我必须写ArrayList<Thing>两次.(嗯,真的,我应该有List<Thing> list = new ArrayList<Thing>();,但这是另一个问题.)
因此Java能够从变量声明中推断出类型参数(<Thing>),它<>来自:
ArrayList<Thing> list = new ArrayList<>();
// No need to repeat ----------------^^
list.add(new Thing());
// ...
Thing t = list.get(0);
//        ^--- No cast! :-)
在该示例中,它不会节省大量的输入,但考虑更复杂的情况,比如将字符串映射到以下列表Thing:
Map<String, List<Thing>> map = new HashMap<>();
...比...更短/更少冗余
Map<String, List<Thing>> map = new HashMap<String, List<Thing>>();
1实际列表仍然只是工作,Object只是变量在编译时携带类型参数信息(在运行时稍微有点),编译器为我们插入强制转换; 更多在这个答案.这是为了在将泛型添加到Java时提供向后兼容性.
| 归档时间: | 
 | 
| 查看次数: | 561 次 | 
| 最近记录: |