泛型类型通常在Dao和Service 中使用BaseDaoT extends Serializable的泛型
最近朋友幾篇文章介紹了改泛型類(lèi)型的文章. 關(guān)聯(lián)文章的地址
????經(jīng)??吹侥切?xiě)好的項(xiàng)目的dao是用的泛型,就不不理解為什么,看到了這個(gè)論壇上的兩個(gè)例子,粘給大家:
????泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類(lèi)型,也就是說(shuō)所操縱的數(shù)據(jù)類(lèi)型被指定為一個(gè)參數(shù)。這類(lèi)參數(shù)類(lèi)型可以用在類(lèi)、接口和方法的創(chuàng)建中,分別稱(chēng)為泛型類(lèi)、泛型接口、泛型方法。
????Java語(yǔ)言引入泛型的好處是安全簡(jiǎn)略。
????在Java SE 1.5之前,沒(méi)有泛型的情況的下,通過(guò)對(duì)類(lèi)型Object的引用來(lái)實(shí)現(xiàn)參數(shù)的“恣意化”,“恣意化”帶來(lái)的缺陷是要做顯式的強(qiáng)制類(lèi)型轉(zhuǎn)換,而這類(lèi)轉(zhuǎn)換是要求開(kāi)發(fā)者對(duì)實(shí)際參數(shù)類(lèi)型可以預(yù)知的情況下進(jìn)行的。對(duì)于強(qiáng)制類(lèi)型轉(zhuǎn)換錯(cuò)誤的情況,編譯器可能不提示錯(cuò)誤,在運(yùn)行的時(shí)候才出現(xiàn)異常,這是一個(gè)安全隱患。
????泛型的好處是在編譯的時(shí)候檢查類(lèi)型安全,并且全部的強(qiáng)制轉(zhuǎn)換都是主動(dòng)和隱式的,提高代碼的重用率。
????泛型在應(yīng)用中還有一些規(guī)則和限制:
????1、泛型的類(lèi)型參數(shù)只能是類(lèi)類(lèi)型(包含自定義類(lèi)),不能是簡(jiǎn)略類(lèi)型。
????2、同一種泛型可以對(duì)應(yīng)多個(gè)版本(因?yàn)閰?shù)類(lèi)型是不確定的),不同版本的泛型類(lèi)實(shí)例是不兼容的。
????3、泛型的類(lèi)型參數(shù)可以有多個(gè)。
????4、泛型的參數(shù)類(lèi)型可以應(yīng)用extends語(yǔ)句,例如<T extends superclass>。習(xí)慣上成為“有界類(lèi)型”。
????5、泛型的參數(shù)類(lèi)型還可以是通配符類(lèi)型。例如Class<?> classType = Class.forName(java.lang.String);
????泛型還有接口、方法等等,內(nèi)容很多,須要花費(fèi)一番工夫才能理解把握并熟練應(yīng)用。在此給出我曾經(jīng)了解泛型時(shí)候?qū)懗龅膬蓚€(gè)例子(根據(jù)看的印象寫(xiě)的),實(shí)現(xiàn)一樣的功能,一個(gè)應(yīng)用了泛型,一個(gè)沒(méi)有應(yīng)用,通過(guò)比較,可以很快學(xué)會(huì)泛型的應(yīng)用,學(xué)會(huì)這個(gè)基本上學(xué)會(huì)了泛型70%的內(nèi)容。
????public class Gen<T> {
????private T ob; //定義泛型成員變量
????public Gen(T ob) {
????this.ob = ob;
????}
????public T getOb() {
????return ob;
????}
????public void setOb(T ob) {
????this.ob = ob;
????}
????public void showTyep() {
????System.out.println("T的實(shí)際類(lèi)型是: " + ob.getClass().getName());
????}
????}
????public class GenDemo {
????public static void main(String[] args){
????//定義泛型類(lèi)Gen的一個(gè)Integer版本
????Gen<Integer> intOb=new Gen<Integer>(88);
????intOb.showTyep();
????int i= intOb.getOb();
????System.out.println("value= " + i);
????System.out.println("----------------------------------");
每日一道理喜歡海,不管湛藍(lán)或是光燦,不管平靜或是波濤洶涌,那起伏蕩漾的,那絲絲的波動(dòng);喜歡聽(tīng)海的聲音,不管是浪擊礁石,或是浪濤翻滾,那輕柔的,那澎湃的;喜歡看海,不管心情是舒暢的或是沉悶的,不管天氣是晴朗的或是陰沉的,那舒心的,那松弛的……
????//定義泛型類(lèi)Gen的一個(gè)String版本
????Gen<String> strOb=new Gen<String>("Hello Gen!");
????strOb.showTyep();
????String s=strOb.getOb();
????System.out.println("value= " + s);
????}
????}
????例子二:這是個(gè)沒(méi)有應(yīng)用泛型的例子
????public class Gen2 {
????private Object ob; //定義一個(gè)通用類(lèi)型成員
????public Gen2(Object ob) {
????this.ob = ob;
????}
????public Object getOb() {
????return ob;
????}
????public void setOb(Object ob) {
????this.ob = ob;
????}
????public void showTyep() {
????System.out.println("T的實(shí)際類(lèi)型是: " + ob.getClass().getName());
????}
????}
????public class GenDemo2 {
????public static void main(String[] args) {
????//定義類(lèi)Gen2的一個(gè)Integer版本
????Gen2 intOb = new Gen2(new Integer(88));
????intOb.showTyep();
????int i = (Integer) intOb.getOb();
????System.out.println("value= " + i);
????System.out.println("----------------------------------");
????//定義類(lèi)Gen2的一個(gè)String版本
????Gen2 strOb = new Gen2("Hello Gen!");
????strOb.showTyep();
????String s = (String) strOb.getOb();
????System.out.println("value= " + s);
????}
????}
????運(yùn)行結(jié)果:
????兩個(gè)例子運(yùn)行Demo結(jié)果是相同的,控制臺(tái)輸出結(jié)果如下:
????T的實(shí)際類(lèi)型是:
????java.lang.Integer
????value= 88
????----------------------------------
????T的實(shí)際類(lèi)型是: java.lang.String
????value= Hello Gen!
????Process finished with exit code 0
????通過(guò)應(yīng)用泛型T增加Dao的冗余代碼,當(dāng)T繼承某個(gè)對(duì)象時(shí)(T extends EntityDao)限制了參數(shù)類(lèi)型必須繼承該對(duì)象(EntityDao),并且ClassT必須要有泛型參數(shù)(DeptDaoImpl extends ClassT<Dept>),否則轉(zhuǎn)換失敗。
文章結(jié)束給大家分享下程序員的一些笑話(huà)語(yǔ)錄: 一個(gè)合格的程序員是不會(huì)寫(xiě)出 諸如 “摧毀地球” 這樣的程序的,他們會(huì)寫(xiě)一個(gè)函數(shù)叫 “摧毀行星”而把地球當(dāng)一個(gè)參數(shù)傳進(jìn)去。
--------------------------------- 原創(chuàng)文章 By
泛型和類(lèi)型
---------------------------------
轉(zhuǎn)載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/26/3100602.html
總結(jié)
以上是生活随笔為你收集整理的泛型类型通常在Dao和Service 中使用BaseDaoT extends Serializable的泛型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 详解python实现FP-TREE进行关
- 下一篇: WindowsPhone后台新特性