xoa中范型的应用
泛型,即“參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然后調用此方法時傳遞實參。那么參數化類型怎么理解呢?顧名思義,就是將類型由原來的具體的類型參數化,類似于方法中的變量參數,此時類型也定義成參數形式(可以稱之為類型形參),然后在使用/調用時傳入具體的類型(類型實參)。
泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉換都是自動和隱式的,以提高代碼的重用率。
例子一:使用了泛型 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?showType()?{ ????????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.showType(); ????????int?i?=?intOb.getOb(); ????????System.out.println("value=?"?+?i); ????????System.out.println("----------------------------------"); ????????//?定義泛型類Gen的一個String版本 ????????Gen<String>?strOb?=?new?Gen<String>("Hello?Gen!"); ????????strOb.showType(); ????????String?s?=?strOb.getOb(); ????????System.out.println("value=?"?+?s); ????} } 例子二:沒有使用泛型 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 看明白這個,以后基本的泛型應用和代碼閱讀就不成問題了。xoa中一般分為三個工程,api定義數據類型,client客服端,server服務器端。
假設server依賴了common工程,當common中的model1或者model2中的屬性屬于返回的數據時(model1 || model2),就需要在api中重新定義一個model1或者model2與之對應(因為api不依賴common)。
后來想到了用泛型
在api中返回的data中用泛型表示model1或者model2,比如
public class MyPurchaseDetailData<T> extends BaseResponse {private Map<String, T> map;//用于記錄投保詳情
......
唯一的一個問題是,通過泛型返回的model1中的int類型的值,會被轉為double類型,當該值需要作為請求中的參數時,需要轉一下
<fmt:parseNumber value="${item.id}" integerOnly="true"/>?
轉載于:https://www.cnblogs.com/govoid/p/5557652.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 设计模式学习笔记(三)之静(动)态代理模
- 下一篇: maxN - 返回数组中N个最大元素 m