刚刚回答了另一个朋友的问题和你这个差不多给你粘过来了:
我想你是想问 为什么往ArrayList里面明明传的是String类的对象;为什么通过跌代器出来后还是Object的类型是吧;
要弄清楚这个问题在毕老师后面的泛型会有详细的讲解;
我在这儿给你大概解释一下 说的不全面希望可以帮到你;当成是后面视频的预习吧;
首先你可以查阅API可以发现ArrayList的后面是带着泛型的;
什么是泛型;通俗的讲就是在往ArrayList集合里存元素之前就确定元素的类型,不是指定的元素不能存;把运行时的错误提前到编译时期;让程序更安全。
以你的这个代码为例:因为你的ArrayList集合没有加泛型;所以往你里存的所以元素都是以Object的形式存入的 而所有的对象都是Object的子类;所以编译可以 通过 ;而在
迭代过程中也是以Object的形式往外返;而你.length方法是String类的特有方法;Object并不具备;所以会报错;提示你找不符号;在学习泛型之前的解决方案是把Object对象向下转换,这样才可以调用子类的特有方法也就String类的特有方法;
在学习了泛型之后就应该这样写了:
import java.util.*;
class ABC
{
public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();
al.add("dfafd");
al.add("jdsasf");
al.add("sadfd");
al.add("jaads");
for (Iterator<String> it = al.iterator(); it.hasNext() ; )
{
//String s = (String)it.next();//因为父类引用不具备子类特有功能;所以没有加泛型且没有向下转换时就会报错;
sop(it.next().length());//加了泛型就可以了;
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
} |