欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

泛型概念

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

泛型類(lèi)

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

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

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

public class TemplateController<T extends IBaseService,E> {
    private Logger logger = LoggerFactory.getLogger(getClass());
    private T t;
    //調(diào)用時(shí)傳入T的對(duì)象
    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);

            //查詢(xún)省市時(shí)代碼截?cái)?
            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ù)出錯(cuò)"+e.getStackTrace());
            return R.error("傳入數(shù)據(jù)出錯(cuò)"+e.getMessage());
        }
    }
}

TemplateController<T extends IBaseService,E> 為泛型類(lèi),

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

IBaseService代碼如下:

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

泛型的使用,ArtBankController繼承泛型類(lèi),將注入的對(duì)象傳入泛型類(lèi)中,執(zhí)行代碼很簡(jiǎn)單,

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

    @Autowired
    private ArtBankService jobArtBankService;

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

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

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

結(jié)論

大家已經(jīng)很熟悉在集合類(lèi)(map、list、set)中使用泛型,但是對(duì)于自身業(yè)務(wù)中的自定義的泛型類(lèi)使用不多。在開(kāi)發(fā)中只要圍繞著可擴(kuò)展性、可維護(hù)性?xún)纱笾黝},善于總結(jié),不難發(fā)現(xiàn)泛型類(lèi)的使用場(chǎng)景

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

相關(guān)文章

  • Java四種線(xiàn)程池的使用詳解

    Java四種線(xiàn)程池的使用詳解

    本篇文章主要介紹了Java四種線(xiàn)程池的使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 詳解java WebSocket的實(shí)現(xiàn)以及Spring WebSocket

    詳解java WebSocket的實(shí)現(xiàn)以及Spring WebSocket

    這篇文章主要介紹了詳解java WebSocket的實(shí)現(xiàn)以及Spring WebSocket ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Java 8新特性方法引用詳細(xì)介紹

    Java 8新特性方法引用詳細(xì)介紹

    這篇文章主要介紹了Java 8新特性方法引用詳細(xì)介紹的相關(guān)資料,這里對(duì)新特性 方法引用做的資料整理,具有參考價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Java postgresql數(shù)組字段類(lèi)型處理方法詳解

    Java postgresql數(shù)組字段類(lèi)型處理方法詳解

    這篇文章主要介紹了Java postgresql數(shù)組字段類(lèi)型處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java獲取XML節(jié)點(diǎn)總結(jié)之讀取XML文檔節(jié)點(diǎn)的方法

    Java獲取XML節(jié)點(diǎn)總結(jié)之讀取XML文檔節(jié)點(diǎn)的方法

    下面小編就為大家?guī)?lái)一篇Java獲取XML節(jié)點(diǎn)總結(jié)之讀取XML文檔節(jié)點(diǎn)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • 詳解SSM框架下結(jié)合log4j、slf4j打印日志

    詳解SSM框架下結(jié)合log4j、slf4j打印日志

    本篇文章主要介紹了詳解SSM框架下結(jié)合log4j、slf4j打印日志,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Maven一鍵部署Springboot到Docker倉(cāng)庫(kù)為自動(dòng)化做準(zhǔn)備(推薦)

    Maven一鍵部署Springboot到Docker倉(cāng)庫(kù)為自動(dòng)化做準(zhǔn)備(推薦)

    這篇文章主要介紹了Maven一鍵部署Springboot到Docker倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 使用mybatis格式化查詢(xún)出的日期

    使用mybatis格式化查詢(xún)出的日期

    這篇文章主要介紹了使用mybatis格式化查詢(xún)出的日期,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息的示例

    SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息的示例

    這篇文章主要介紹了SpringBoot集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Springboot工程中使用filter過(guò)程解析

    Springboot工程中使用filter過(guò)程解析

    這篇文章主要介紹了springboot工程中使用filter過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論