苦逼的容器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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章