JAVA-初步認識-常用對象API(集合框架-泛型-泛型類)
一.
泛型我們了解完基本原理之後,除了在集合中用來傳遞參數類型外,還有其它的應用。它還能為我們提供很多設計上的便捷。
介紹一下以前和現在的定義方法,有什麽不一樣。
這裏面為了方便於應用,搞了一個工具類,和主要的程序分開發。
對工具類的描述,現在要操作person,要用工具類對person對象進行操作,可以完成person對象的設置和獲取。
這個工具類只能操作person,不能操作其它對象。如果想要其它對象,還要書寫Tool1,Tool2......這樣很麻煩,怎麽辦?(對傳輸進來的person對象進行操作)
可以不可以定義一個工具類,操作所有對象。如果想定義一個工具類,操作所有對象,應該找到所有對象的共性,比如將這裏的person改為object就可以了。
如果寫成object了,那就意味著什麽對象都能操作。
有一個快捷修改操作,如上圖所示。
現在演示一下,建立學生和工人,以及人這三個類,學生和工人都繼承人這個類,這是下面演示的基礎。(這些都是在泛型主函數之外的部分)
現在往主函數中創建一個工具類,然後傳入一個學生類,再通過gerobject取出學生類。圖書顯示了波浪線,表明出錯了。
出錯的原因是:學生往工具類中存儲後,就意味著向上轉型了,接著往外取的時候就是object類。要想取出特有類型的話,必須要強轉。
上面是我們以前的做法,運行一下,沒有出錯。
現在一不小心,往裏面傳遞了一個worker類,
回過去看tool類,裏面接收的是object類,所以往裏面存儲student類,或者worker類,都是可以的。編譯時不會報錯,但是上述程序在運行時出現了錯誤。
這就是我們以前的做法,為了提高程序的擴展性,我們用的全都是object,什麽對象都能往裏面傳遞。好處是object出現,提高擴展性了,但是帶有弊端了,就是要強轉。不強轉不能用。
現在做一些改動,對tool中裝載有object的程序,做一個改動。
將修改前後寫在一個java工具類中,上下對照著看。在寫工具類的時候,這個是用來操作對象工具類,緊接著你要操作哪個對象,不確定。以前是用object,現在有了泛型,就不那麽弄了。操作哪個對象,你給我傳遞,傳遞哪個,就操作哪個。在上面定義參數,這是5.0才有的。
以前玩Arralist是java定義好的,現在這個是我們定義的,這叫做自定義泛型類。
如果沒有泛型就用object,你可以理解為泛型是object中的一種方案,但是這種方式更為安全。
現在回過來取修改前面錯誤的程序,
如果從頭到尾都是student的話,編譯運行是沒有問題的,但是現在不小心輸入了worker了。
上面的輸入worker的寫法,如果是早期的寫法,運行的時候就出現了錯誤。現在改成泛型的寫法,編譯都通過不了。這就是泛型的好處,進一步驗證了泛型將運行時的問題,轉到了編譯時期。避免了強轉的麻煩。
這種方式要比object安全的多,但是書寫麻煩,要寫尖括號,
JAVA-初步認識-常用對象API(集合框架-泛型-泛型類)