什麽是Java泛型(正在整理)
阿新 • • 發佈:2018-06-18
clas 出現 add 編碼 AI 什麽是 問題 java泛型 list
為什麽要使用泛型?
引入例子
public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("qqyumidi"); list.add("corn"); list.add(100); for (int i = 0; i < list.size(); i++) { String name = (String) list.get(i); // 1 System.out.println("name:" + name); } } }
上述代碼在編譯器沒有問題,但在運行期間,將會報錯。因為List的add方法的參數為object,如果不知道List類型時,通過強轉獲值,這時就會報錯了。因為編譯階段正常,而運行時會出現“java.lang.ClassCastException”異常。因此,導致此類錯誤編碼過程中不易發現。
在如上的編碼過程中,我們發現主要存在兩個問題:
1.將對象放入集合的時候,集合不會記住對象的類型,當再次從集合中取出此對象時,改對象的編譯類型變成了Object類型,但運行時的類型仍然是其本身類型。
2.因此,//1處取出集合元素時要人為的強制轉化到具體的目標類型,且很容易出現java.lang.ClassCastException異常
(這個例子,是我在一篇博客裏找的我能讀懂的引入泛型的例子,可是我執行的時候報錯了,錯的內容是java:4: error: cannot find symbol,可能是我的jdk版本不對,我想把關於泛型的例子盡快整理完,這個錯就暫時先放這裏了。知道具體錯的朋友,請在評論區給我留言,謝謝。)
怎麽樣才能讓集合記住集合內部元素各個類型,且能夠達到只要編譯時不出現問題,運行時就不出現java.lang.ClassCastException異常呢?答案就是使用泛型。
什麽是泛型?
泛型,即“參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。那麽也將類型由原來的具體的類型參數化,類似於方法中的變量參數,類型也定義成參數形式(稱之為類型形參),然後在使用時傳入具體的類型(類型實參)
public class GenericTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("qqyumidi"); list.add("corn"); //list.add(100); // 1 提示編譯錯誤 for (int i = 0; i < list.size(); i++) { String name = list.get(i); // 2 System.out.println("name:" + name); } } }
什麽是Java泛型(正在整理)