最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java基礎(chǔ)開發(fā)泛型類的詳解

 更新時間:2021年10月13日 09:56:07   作者:guoyp2126  
這篇文章為大家介紹了java基礎(chǔ)開發(fā)中泛型類的詳解,包括泛型的概念以及應(yīng)用實例有需要的朋友可以借鑒參考下,希望能夠有所幫助

前言

在軟件開發(fā)中,有許多執(zhí)行過程很類似,許多人使用復(fù)制粘貼完成功能,這種做法雖然編譯器不會報錯,但會使用波浪線給出提示,給以后的維護帶來了很大的隱患。這種情況開發(fā)人員通常根據(jù)需要成員抽取公用方法、公用類或使用繼承完成,提高了代碼的復(fù)用。但是,在一些特殊情況(如執(zhí)行過程中會使用到對象,這些對象操作相同,但具體的模塊有有所區(qū)別),此時只能使用泛型完成代碼的復(fù)用。

泛型概念

所謂泛型就是將類型由原來的具體類型參數(shù)化,類似于方法中的變量參數(shù),此時類型也定義成參數(shù)形式。這種參數(shù)類型可以用在類、接口和方法中,分別被稱為泛型類、泛型接口、泛型方法。在實際的編程過程中,通過泛型可以定義類型安全的數(shù)據(jù)結(jié)構(gòu)(類型安全),而無須使用實際的數(shù)據(jù)類型(可擴展)。這能夠顯著提高性能并得到更高質(zhì)量的代碼(高性能),因為您可以重用數(shù)據(jù)處理算法,而無須復(fù)制類型特定的代碼(可重用)

泛型類

在ArrayList類中,ArrayList里面能夠放各種對象,如String、Integer、pojo等,可以完成他們的add()、get()等,聲明時在聲名構(gòu)造一個數(shù)組列表的時候用<>來說明這個容器里面放的是什么類型的東西,如ArrayList< String >代表是String集合,ArrayList就是一個泛型類,在這個類中,存放對象的類型是通過參數(shù)定義的,這個類就是泛型類。

由于一組操作的類型不同,我們不得不定義不同的函數(shù),這樣會產(chǎn)生大量基本相同的代碼。程序員已經(jīng)習(xí)慣了使用集合中的泛型類,實際上泛型更廣泛的應(yīng)用在業(yè)務(wù)邏輯的處理。泛型類中定義了一組操作,這組操作中完成相同過程。

【例】:在SSM模式下多個模塊controller需要完成分頁信息獲取、按照名稱模糊查詢及按照行政區(qū)劃碼等條件的查詢等功能。每個模塊的controller中的需要訪問的services對象不同,可以設(shè)計一個泛型類來編寫相應(yīng)代碼,避免出現(xiàn)大量的復(fù)制代碼。

public class TemplateController<T extends IBaseService,E> {
    private Logger logger = LoggerFactory.getLogger(getClass());
    private T t;
    //調(diào)用時傳入T的對象
    public TemplateController(T obj){
        t=obj;
    }

    public R getList(Map<String, Object> params){
        try {
            String pageSize = params.get("pagesize").toString();
            String currPage = params.get("currpage").toString();
            String cName = params.get("CName").toString();
            String regionCode = params.get("regionCode").toString();
            long size = Long.parseLong(pageSize);
            long currPageNo = Long.parseLong(currPage);
            Page<E> page=new Page<>(currPageNo,size);

            //查詢省市時代碼截斷
            String  code = RegionCode.GetRegionCode(regionCode);
            PageUtils data = t.getList(page,cName,code);
            return R.ok().put("data", data);
        } catch (Exception e) {
            logger.debug("傳入數(shù)據(jù)出錯"+e.getStackTrace());
            return R.error("傳入數(shù)據(jù)出錯"+e.getMessage());
        }
    }
}

TemplateController<T extends IBaseService,E> 為泛型類,

定義了兩個類型參數(shù),分別為<T,E>其中T為有界類型,限定為實現(xiàn)了IBaseService接口的類。
IBaseService定義了getList方法,在完成數(shù)據(jù)提取操作中調(diào)用。

IBaseService代碼如下:

public interface IBaseService<T> {
    //取分頁記錄
    PageUtils getList(Page<T> page, String cName, String regionCode); 
}

泛型的使用,ArtBankController繼承泛型類,將注入的對象傳入泛型類中,執(zhí)行代碼很簡單,

@RequestMapping("bank")
public class ArtBankController extends TemplateController<ArtBankService,ArtBankEntity> {

    @Autowired
    private ArtBankService jobArtBankService;

    public ArtBankController(ArtBankService jobArtBankService) {
        super(jobArtBankService);
    }

    //執(zhí)行代碼簡單,只需調(diào)用父類的getList方法即可
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params){
        return this.getList(params);
    }
 }

業(yè)務(wù)中很多模塊都需要分頁、按照名稱模糊查詢及按照行政區(qū)劃查詢時,實現(xiàn)了代碼的復(fù)用

結(jié)論

大家已經(jīng)很熟悉在集合類(map、list、set)中使用泛型,但是對于自身業(yè)務(wù)中的自定義的泛型類使用不多。在開發(fā)中只要圍繞著可擴展性、可維護性兩大主題,善于總結(jié),不難發(fā)現(xiàn)泛型類的使用場景

以上就是java基礎(chǔ)開發(fā)泛型類的詳解的詳細內(nèi)容,更多關(guān)于java基礎(chǔ)泛型類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java的CyclicBarrier循環(huán)屏障解析

    Java的CyclicBarrier循環(huán)屏障解析

    這篇文章主要介紹了Java的CyclicBarrier循環(huán)屏障解析,CyclicBarrier和CountDownLatch一樣,是一個同步工具類,它允許一組線程相互等待直到達到某個common?barrier?point,在程序中CyclicBarrier是非常有用的,它適用于一組線程必須互相等待的情況,需要的朋友可以參考下
    2023-12-12
  • 基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng)

    基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng)

    這篇文章主要為大家詳細介紹了基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java解析pdf格式發(fā)票的代碼實現(xiàn)

    Java解析pdf格式發(fā)票的代碼實現(xiàn)

    為了減少用戶工作量及誤操作的可能性,需要實現(xiàn)用戶上傳PDF格式的發(fā)票,系統(tǒng)通過解析PDF文件獲取發(fā)票內(nèi)容,并直接將其寫入表單,以下文章記錄了功能實現(xiàn)的代碼,需要的朋友可以參考下
    2024-08-08
  • java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    這篇文章主要介紹了java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解,需要的朋友可以參考下
    2020-02-02
  • DispatcherServlet處理器的適配和處理解析

    DispatcherServlet處理器的適配和處理解析

    這篇文章主要為大家介紹了DispatcherServlet的處理器的適配和處理流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 詳細分析JAVA8新特性 Base64

    詳細分析JAVA8新特性 Base64

    這篇文章主要介紹了JAVA8新特性 Base64的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 總結(jié)十個實用但偏執(zhí)的Java編程技術(shù)

    總結(jié)十個實用但偏執(zhí)的Java編程技術(shù)

    Java是世界上最流行的程序語言,從1995年問世以來,Java的生態(tài)系統(tǒng)在一直在蓬勃的發(fā)展著。下面這篇文章主要總結(jié)了十個實用但偏執(zhí)的Java編程技術(shù),需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • Java多線程 線程同步與死鎖

    Java多線程 線程同步與死鎖

    這篇文章主要介紹了 Java多線程 線程同步與死鎖的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Java實現(xiàn)布隆過濾器的幾種方式總結(jié)

    Java實現(xiàn)布隆過濾器的幾種方式總結(jié)

    這篇文章給大家總結(jié)了幾種Java實現(xiàn)布隆過濾器的方式,手動硬編碼實現(xiàn),引入Guava實現(xiàn),引入hutool實現(xiàn),通過redis實現(xiàn)等幾種方式,文中有詳細的代碼和圖解,需要的朋友可以參考下
    2023-07-07
  • springboot 啟動時初始化數(shù)據(jù)庫的步驟

    springboot 啟動時初始化數(shù)據(jù)庫的步驟

    這篇文章主要介紹了springboot 啟動時初始化數(shù)據(jù)庫的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2021-01-01

最新評論

岫岩| 怀远县| 栾川县| 五台县| 瑞安市| 威远县| 保靖县| 崇州市| 射洪县| 渝中区| 汉阴县| 乌什县| 南澳县| 遂昌县| 增城市| 嘉善县| 双城市| 牡丹江市| 沧源| 环江| 根河市| 云浮市| 武定县| 开鲁县| 林西县| 义乌市| 洛宁县| 砚山县| 买车| 游戏| 疏附县| 安顺市| 黄冈市| 白河县| 青浦区| 建湖县| 通城县| 永仁县| 吉木萨尔县| 青川县| 浦江县|