1. 程式人生 > >JAVA-初步認識-常用對象API(集合框架-泛型-泛型類)

JAVA-初步認識-常用對象API(集合框架-泛型-泛型類)

bject 是我 work 開發 class com 早期 顯示 想要

一.

泛型我們了解完基本原理之後,除了在集合中用來傳遞參數類型外,還有其它的應用。它還能為我們提供很多設計上的便捷。

介紹一下以前和現在的定義方法,有什麽不一樣。

這裏面為了方便於應用,搞了一個工具類,和主要的程序分開發。

對工具類的描述,現在要操作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(集合框架-泛型-泛型類)