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