java基础开发泛型类的详解

 更新时间:2021年10月13日 09:56:07   作者:guoyp2126  
这篇文章为大家介绍了java基础开发中泛型类的详解,包括泛型的概念以及应用实例有需要的朋友可以借鉴参考下,希望能够有所帮助

前言

在软件开发中,有许多执行过程很类似,许多人使用复制粘贴完成功能,这种做法虽然编译器不会报错,但会使用波浪线给出提示,给以后的维护带来了很大的隐患。这种情况开发人员通常根据需要成员抽取公用方法、公用类或使用继承完成,提高了代码的复用。但是,在一些特殊情况(如执行过程中会使用到对象,这些对象操作相同,但具体的模块有有所区别),此时只能使用泛型完成代码的复用。

泛型概念

所谓泛型就是将类型由原来的具体类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。在实际的编程过程中,通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)

泛型类

在ArrayList类中,ArrayList里面能够放各种对象,如String、Integer、pojo等,可以完成他们的add()、get()等,声明时在声名构造一个数组列表的时候用<>来说明这个容器里面放的是什么类型的东西,如ArrayList< String >代表是String集合,ArrayList就是一个泛型类,在这个类中,存放对象的类型是通过参数定义的,这个类就是泛型类。

由于一组操作的类型不同,我们不得不定义不同的函数,这样会产生大量基本相同的代码。程序员已经习惯了使用集合中的泛型类,实际上泛型更广泛的应用在业务逻辑的处理。泛型类中定义了一组操作,这组操作中完成相同过程。

【例】:在SSM模式下多个模块controller需要完成分页信息获取、按照名称模糊查询及按照行政区划码等条件的查询等功能。每个模块的controller中的需要访问的services对象不同,可以设计一个泛型类来编写相应代码,避免出现大量的复制代码。

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代码如下:

public interface IBaseService<T> {
    //取分页记录
    PageUtils getList(Page<T> page, String cName, String regionCode); 
}

泛型的使用,ArtBankController继承泛型类,将注入的对象传入泛型类中,执行代码很简单,

@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基础泛型类的资料请关注脚本之家其它相关文章!

相关文章

  • Java的CyclicBarrier循环屏障解析

    Java的CyclicBarrier循环屏障解析

    这篇文章主要介绍了Java的CyclicBarrier循环屏障解析,CyclicBarrier和CountDownLatch一样,是一个同步工具类,它允许一组线程相互等待直到达到某个common barrier point,在程序中CyclicBarrier是非常有用的,它适用于一组线程必须互相等待的情况,需要的朋友可以参考下
    2023-12-12
  • 基于springboot+vue实现垃圾分类管理系统

    基于springboot+vue实现垃圾分类管理系统

    这篇文章主要为大家详细介绍了基于springboot+vue实现垃圾分类管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java解析pdf格式发票的代码实现

    Java解析pdf格式发票的代码实现

    为了减少用户工作量及误操作的可能性,需要实现用户上传PDF格式的发票,系统通过解析PDF文件获取发票内容,并直接将其写入表单,以下文章记录了功能实现的代码,需要的朋友可以参考下
    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的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 总结十个实用但偏执的Java编程技术

    总结十个实用但偏执的Java编程技术

    Java是世界上最流行的程序语言,从1995年问世以来,Java的生态系统在一直在蓬勃的发展着。下面这篇文章主要总结了十个实用但偏执的Java编程技术,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-01-01
  • Java多线程 线程同步与死锁

    Java多线程 线程同步与死锁

    这篇文章主要介绍了 Java多线程 线程同步与死锁的相关资料,需要的朋友可以参考下
    2017-07-07
  • Java实现布隆过滤器的几种方式总结

    Java实现布隆过滤器的几种方式总结

    这篇文章给大家总结了几种Java实现布隆过滤器的方式,手动硬编码实现,引入Guava实现,引入hutool实现,通过redis实现等几种方式,文中有详细的代码和图解,需要的朋友可以参考下
    2023-07-07
  • springboot 启动时初始化数据库的步骤

    springboot 启动时初始化数据库的步骤

    这篇文章主要介绍了springboot 启动时初始化数据库的步骤,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2021-01-01

最新评论