Bob*_*r02 4 java generics iterator
可能重复:
什么是原始类型,为什么我们不应该使用它?
这个问题几乎完全包含在描述中:有什么区别
Iterator<?>
Run Code Online (Sandbox Code Playgroud)
和
Iterator
Run Code Online (Sandbox Code Playgroud)
java中的对象?他们都在对象类型上进行迭代吗?
不. Iterator<?>迭代?s(某种类型派生自的Object),而Iterator只提供Objects.这是Java中的泛型支持.
什么是?类型?嗯,这是一个很好的问题.
回到Java 5之前的旧时代,你有无类型的集合和无类型的迭代器.所以你Object的收藏品中有s,你必须手动投射它们.例如:
List foo = new ArrayList();
foo.add("Foo!");
for(Iterator i = foo.iterator(); i.hasNext(); )
{
Object element = i.next();
System.out.println((String)element);
}
Run Code Online (Sandbox Code Playgroud)
注意演员?那是因为我们只是Object填入列表,我们必须自己做所有的内务处理.仅仅是a并没有那么糟糕List,但想象一下包含地图的地图,地图中包含一个......好吧,你明白了.你在铸造地狱,你可以很快知道是不是你正在寻找一个地图,从去String到Integer或你的另一从会倒流地图Integer来String.
在Java 5中,您可以使用泛型,所以现在您可以说:
List<String> foo = new ArrayList();
foo.add("Foo!");
for(Iterator<String> i = foo.iterator(); i.hasNext(); )
{
String element = i.next();
System.out.println(element);
}
Run Code Online (Sandbox Code Playgroud)
请注意,演员是不必要的?当我们使用a时List<String>,我们可以使用a Iterator<String>并具有某种类型的安全性.
当您开始使用更复杂的数据结构时,这非常有用,例如:
Map<String, Map<String, Map<String, SomeRandomObject>>> complexMap;
Run Code Online (Sandbox Code Playgroud)