很多朋友都想知道java generic是什么?下面就一起來了解一下吧~
java generic(泛型):一般類型,也可以為任何類型,泛型的本質是“參數化類型”,即所操作的數據類型被指定為一個參數,泛型是在JDK1.5中引入的特性。
泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型,而不是在運行時才出現錯誤。在實際編程中,會出現很多這樣的情況:同樣的方法,只是數據類型不同。現在如果想申明一個Box類,可以存放所有基本數據類型包裝類的對象,可以有以下寫法:
public?class?Box?{ ????private?Integer?object1; ????public?void?set(Integer?object1)?{?this.object1?=?object1;?} ????public?Integer?get()?{?return?object1;?} ????private?Double?object2; ????public?void?set(Double?object2)?{?this.object2?=?object2;?} ????public?Double?get()?{?return?object2;?} }
這樣編程,會出現大量的冗余代碼,大家都知道Java中的所有類都繼承于Object類,根據“里式替換原則”,可以寫成這樣:
public?class?Box?{ ????private?Object?object; ????public?void?set(Object?object)?{?this.object?=?object;?} ????public?Object?get()?{?return?object;?} }
既然申明了Object類型,意味著除了8個原始數據類型,還可以傳遞其他任意類型。如果set了一個Integer對象,get用作String類型,程序在運行時會報錯,但是卻能通過編譯的類型檢查,將上面的Box類改用泛型來實現就可以很好的解決這個問題。
/** ?*?Generic?version?of?the?Box?class. ?*?@param??the?type?of?the?value?being?boxed ?*/ public?class?Box ?{ ????//?T?stands?for?"Type" ????private?T?t; ????public?void?set(T?t)?{?this.t?=?t;?} ????public?T?get()?{?return?t;?} } public?static?void?main(String[]?args)?{ ????Box ?integerBox?=?new?Box (); ????Box ?stringBox?=?new?Box (); ????integerBox.add(new?Integer(10)); ????stringBox.add(new?String("泛型測試")); ????System.out.printf("整型值為?:%d\n\n",?integerBox.get()); ????System.out.printf("字符串為?:%s\n",?stringBox.get());
}使用泛型有的好處:編譯時強類型檢查、無需手動進行類型轉換、可以實現復用,編寫通用算法。
以上就是小編今天的分享,希望可以幫到大家。