java基础开发泛型类的详解

目录前言泛型概念泛型类结论前言在软件开发中,有许多执行过程很类似,许多人使用复制粘贴完成功能,这种做法虽然编译器不会报错,但会使用波浪线给出提示,给以后的维护带来了很大的隐患。这种情况开发人员通常根据需要成员抽取公用方法、公用类或使用继承完成,提高了代码的复用。但是,在一些特殊情况(如执行过程中会使用到对象,这些对象操作相同,但具体的模块有有所区别),此时只能使用泛型完成代码的复用。泛型概念所谓泛型就是将类型由原来的具体类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。在实际的编程过程中,通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)泛型类在ArrayList类中,ArrayList里面能够放各种对象,如String、Integer、pojo等,可以完成他们的add()、get()等,声明时在声名构造一个数组列表的时候用<>来说明这个容器里面放的是什么类型的东西,如ArrayList< String >代表是String集合,ArrayList就是一个泛型类,在这个类中,存放对象的类型是通过参数定义的,这个类就是泛型类。由于一组操作的类型不同,我们不得不定义不同的函数,这样会产生大量基本相同的代码。程序员已经习惯了使用集合中的泛型类,实际上泛型更广泛的应用在业务逻辑的处理。泛型类中定义了一组操作,这组操作中完成相同过程。【例】:在SSM模式下多个模块controller需要完成分页信息获取、按照名称模糊查询及按照行政区划码等条件的查询等功能。每个模块的controller中的需要访问的services对象不同,可以设计一个泛型类来编写相应代码,避免出现大量的复制代码。12345678910111213141516171819202122232425262728public 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代码如下:1234public interface IBaseService<T> {//取分页记录PageUtils getList(Page<T> page, String cName, String regionCode);}泛型的使用,ArtBankController继承泛型类,将注入的对象传入泛型类中,执行代码很简单,12345678910111213141516@RequestMapping("bank")public class ArtBankController extends TemplateController<ArtBankService,ArtBankEntity> {@Autowiredprivate 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)中使用泛型,但是对于自身业务中的自定义的泛型类使用不多。在开发中只要围绕着可扩展性、可维护性两大主题,善于总结,不难发现泛型类的使用场景

(0)

相关推荐

  • 如何给程序中的变量起个好名字?

    对一个人来说,名字很重要,俗语说"人如其名".对程序中的变量而言,名字同样非常重要. 作为开发人员,你要花费大量的敲代码时间来创建变量和考虑给变量起个名字. 名字无处不在. 你可以 ...

  • Java教程:Java Boolean类

    Boolean类将基本类型为boolean的值包装在一个对象中.一个Boolean类的对象只包含一个类型为boolean的字段.此外,此类还为boolean和String的相互转换提供了很多方法,并提 ...

  • 山水画基础教程:图文详解山石画法

    山石是山水画最基本的内容,石是山的局部,山石的绘画,要经过勾.皴.擦.点.染等几个基本步骤或再增加提的程序.勾是用中锋或侧锋画石块的轮廓,确定其形状,勾的线条可依石的特征灵活运用.勾石的顺序是先左后右 ...

  • 山水画基础教程:图文详解水的画法

    在山水画中,水的表现是根据立意中的景况需要来决定其设置和主次角色,以及确立格调与精细或大略的表现程度.水的设置有其规律,最常规的如口诀:"高壑脉叠发流源,山势峻峭瀑泉:岗峦曲折走溪涧,陵阿洲 ...

  • IQ正交调制器基础知识和测试详解

    IQ正交调制器基础知识和测试详解

  • PS基础入门15:详解图层蒙版。9分钟,信息量大,知识点很密集。

    PS基础入门15:详解图层蒙版。9分钟,信息量大,知识点很密集。

  • 风水、八字基础:五行学术详解

    一:正体五行诀曰:亥壬子癸大江中,寅甲乙夘巽木宫,已丙午丁皆属火,庚申辛酉乾金逢,辰戌丑未坤艮土,此是五行老祖宗.正体五行是天干地支五行的本性属性,其它五行属性都是由正体派生岀来的.在具体应用中,正体 ...

  • 几款最基础蛋糕胚做法详解

    常见的五种蛋糕类型:芝士蛋糕.重油蛋糕.巧克力蛋糕.戚风蛋糕.慕斯蛋糕今天小姿就给大家讲讲烘焙入门最常见的三大基础蛋糕胚分别是海绵蛋糕胚.戚风蛋糕胚.以及天使蛋糕胚,他们之间又有哪些区别呢??? 1. ...

  • 八字基础——地支六合(详解)

    地支六合: 子丑合化土,寅亥合化木, 卯戌合化火,辰酉合化金, 巳申合化水,午未合化土. 相合分合化与合绊 (1)合化有三个条件. A.命局中的相临二支或三支不以化论. B.大运.流年与命局作用可以以 ...

  • NRF24L01无线串口开发板程序详解

    NRF24L01无线串口开发板程序详解

  • Java中方法的重载详解(含系统配套视频)

    一.方法的概念 在之前我们学习了方法的定义,方法实现指定功能的代码块的组合,基本的定义 如下: 访问修饰符[static] 返回值类型[如果不需要返回值使用void]方法名(参数类型 参数名,参数类型 ...