苦逼的容器Collection!

最近学到容器,觉得挺难的,遇到过两个问题,在这发泄一下!!!

一:有关于容器对象.toString()的问题。

public class TestCollection {
 
 public static void main(String[] args) {
  Collection c = new ArrayList();
  c.add("hello");
  c.add(new Integer(100));
  System.out.println(c);
 }

}

打印结果为

但经查看ArrayList并没有重写.toString(),那这个.toString()是从哪来的呢。然后查看了万能的API文档。真相大白!

ArrayList类继承了AbstractList类。

public class ArrayList<E>extends AbstractList<E>

而AbstractList则继承了AbstractCollection类

public abstract class AbstractList<E>extends AbstractCollection<E>

System.out.println(c);中会调用c中的.toString(),但ArrayList类没有重写.toString(),则会向其父类AbstractList找是否重写了.toString(),一找还没找到,就又向AbstractList的父类找是否生写了该方法。结果一看,AbstractCollection重写了.toString(),OK,总算找到了,那么就调用即可。

那么为什么会输出的格式如上图所示呢,即呢?那就再查看一下重写的.toString()方法是怎么样重写的吧!

public String toString()
返回此 collection 的字符串表示形式。该字符串表示形式由 collection 元素的列表组成,这些元素按其迭代器返回的顺序排列,并用方括号 ("[]") 括起来。相邻元素由字符 ", "(逗号加空格)分隔。通过 String.valueOf(Object) 可以将元素转换成字符串。

OK,关于容器的.toString()总算是一知半解了呀,嘻嘻……

二:

public class TestCollection {

public static void main(String[] args) {
  Collection c = new ArrayList();
  c.add("hello");
  c.add(new Integer(100));
  System.out.println(c);
}

}

在DOS下javac该代码段时,会出现提醒

这是因为JDK1.5中引进了泛型,但是你的ArrayList却没有采用,所有会有安全问题。

用1.5版本的JDK编译才会出现这种问题,运行是没有问题的,主要是编译会出警告而已。

发布了25 篇原创文章 · 获赞 11 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章