一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java基礎開發泛型類的詳解

java基礎開發泛型類的詳解

2022-02-17 14:58guoyp2126 Java教程

這篇文章為大家介紹了java基礎開發中泛型類的詳解,包括泛型的概念以及應用實例有需要的朋友可以借鑒參考下,希望能夠有所幫助

前言

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

泛型概念

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

泛型類

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class TemplateController<T extends IBaseService,E> {
    private Logger logger = LoggerFactory.getLogger(getClass());
    private T t;
    //調用時傳入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("傳入數據出錯"+e.getStackTrace());
            return R.error("傳入數據出錯"+e.getMessage());
        }
    }
}

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

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

IBaseService代碼如下:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RequestMapping("bank")
public class ArtBankController extends TemplateController<ArtBankService,ArtBankEntity> {
 
    @Autowired
    private ArtBankService jobArtBankService;
 
    public ArtBankController(ArtBankService jobArtBankService) {
        super(jobArtBankService);
    }
 
    //執行代碼簡單,只需調用父類的getList方法即可
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params){
        return this.getList(params);
    }
 }

業務中很多模塊都需要分頁、按照名稱模糊查詢及按照行政區劃查詢時,實現了代碼的復用

結論

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

以上就是java基礎開發泛型類的詳解的詳細內容,更多關于java基礎泛型類的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/guoyp2126/article/details/117909048?spm=1001.2014.3001.5501

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 第一次处破女18分钟 | 日本免费v片一二三区 | 性欧美4khdxxxx | 国产精品女同久久免费观看 | 体检小说 | 日本高清视频网站www | 天天操天天射天天色 | chinese真实incest chinese特色video chinese男性厕所撒尿合集 | 久久精品视在线观看2 | 免费观看一级一片 | 97影院网| 97国产蝌蚪视频在线观看 | 大团圆6全文在线阅读 | 香蕉91xj.cc | 久久青青草原综合伊人 | 乌克兰18sex性hd | 国产欧美日韩综合 | 男人操女人免费视频 | 欧美激情精品久久久久久不卡 | 精品第一国产综合精品蜜芽 | 涩涩成人 | 99久久国产综合精品女不卡 | 手机在线免费观看高清 | 欧美另类bbbxxxxx另类 | 女人全身裸露无遮挡免费观看 | 色97色| china中国xxxxfree| a v在线男人的天堂观看免费 | 欧美在线观看一区二区三 | 免费网址在线观看入口推荐 | 无人区国产大片 | 人与善交大片免费看 | 久热人人综合人人九九精品视频 | 晚上禁用的十大黄台视频 | 欧美一区二区三区免费不卡 | 日本高清免费不卡在线播放 | 久久无码人妻AV精品一区 | 午夜亚洲WWW湿好爽 午夜想想爱午夜剧场 | 香港三级血恋3 | 亚洲天堂成人在线观看 | 荡娃艳妇系列小说 |