当前位置: 首页 > news >正文

递归泛型(Self-Type)Builder模式

`public abstract static class Builder<T extends Builder> {
protected String project;
protected String summary;
protected String description;
protected String issueType;
protected String assignee;

    public T project(String project) {this.project = project;return self();}public T summary(String summary) {this.summary = summary;return self();}public T description(String description) {this.description = description;return self();}public T issueType(String issueType) {this.issueType = issueType;return self();}public T assignee(String assignee) {this.assignee = assignee;return self();}protected abstract T self();public abstract BaseIssueRequest build();
}`

Java代码建造者模式抽象基类设计解读

你想要我解读的这段Java代码是一个典型的建造者模式(Builder Pattern) 抽象基类设计,专门用于分步构建包含项目、摘要等属性的BaseIssueRequest对象,且通过泛型保证了子类实现时的类型安全。下面我会逐部分拆解,让你清晰理解每一行的作用和整体设计思路。

一、整体功能总结

这段代码定义了一个抽象的静态内部Builder类,核心目的是封装BaseIssueRequest对象的属性设置过程,通过“链式调用”的方式让对象构建更灵活、可读性更高;同时通过抽象方法约束子类必须实现具体的“返回自身实例”和“构建最终对象”的逻辑。

二、逐部分代码解读

1. 类定义:public abstract static class Builder<T extends Builder<T>>


  • public:该类对外可见,外部可以访问这个Builder类;

  • abstract:抽象类,不能直接实例化,必须由子类继承并实现其中的抽象方法;

  • static:静态内部类,意味着这个Builder类不依赖外部类的实例,可直接通过“外部类.Builder”的方式使用(比如OuterClass.Builder);

  • <T extends Builder<T>>递归泛型(F-bounded泛型),这是这段代码的核心设计技巧:

    • 约束泛型T必须是Builder的子类;

    • 目的是让子类Builder调用project()summary()等方法时,返回的是子类自身类型(而非父类Builder),保证链式调用的类型安全。

2. 成员变量:


  • protected:保护访问权限,既保证封装性(外部类不能直接访问),又允许子类直接使用这些属性;

  • 这些变量对应最终要构建的BaseIssueRequest对象的核心属性:项目(project)、摘要(summary)、问题描述(description)、问题类型(issueType)、经办人(assignee)。

3. 属性设置方法(链式调用核心):

project()方法为例,其他summary()description()等方法逻辑完全一致:


  • 方法作用:接收外部传入的project值,赋值给当前Builder对象的project成员变量;

  • 返回值:返回泛型T类型(子类Builder),实现链式调用(比如builder.project("proj1").summary("test").build());

  • self():调用抽象方法self(),由子类实现返回“自身实例”,这是递归泛型能生效的关键。

4. 抽象方法(约束子类实现):


  • protected abstract T self()

    • 抽象方法,子类必须实现;

    • 作用:返回当前Builder子类的实例(通常子类直接返回this),解决父类无法知道子类具体类型的问题,保证链式调用返回子类类型;

  • public abstract BaseIssueRequest build()

    • 抽象方法,子类必须实现;

    • 作用:将Builder中设置的所有属性组装成最终的BaseIssueRequest对象并返回,是建造者模式的“产品构建”核心方法。

三、使用示例(帮助理解子类实现和调用)

为了让你更直观理解,我补充一个子类实现和调用的完整示例:


总结

  1. 核心设计模式:采用建造者模式,将复杂对象(BaseIssueRequest)的构建过程拆分,支持分步设置属性,且链式调用让代码更简洁;

  2. 泛型技巧:递归泛型<T extends Builder<T>>保证子类链式调用时返回自身类型,避免类型强转;

  3. 抽象约束self()build()抽象方法强制子类实现核心逻辑,保证建造者模式的规范性和扩展性。

简单来说,这段代码是为“构建包含项目、摘要等属性的问题请求对象”设计的通用抽象构建器,子类只需实现少量代码就能完成具体对象的构建。

(注:文档部分内容可能由 AI 生成)

http://www.gsyq.cn/news/80551.html

相关文章:

  • 2025年网带式抛丸机生产商推荐,看看哪家的抛丸机精度高? - 工业品牌热点
  • 豆粉与小酥肉淀粉厂商怎么选?这些要点要知道 - mypinpai
  • 国内旅行社排名哪家比较推荐?精选口碑机构参考 - 品牌排行榜
  • 武强县农村自建房找谁好?河北衡水武强县自建房公司/机构深度评测口碑推荐榜 - 苏木2025
  • 云电脑系列12:设计师必备:云电脑流畅运行 PS/Pr/AE,还能优化性能
  • 北京口碑好的涉外离婚律师有哪些?这份参考值得关注 - 品牌排行榜
  • 想在藁城区农村盖房子,靠谱的自建房公司推荐。河北石家庄藁城区自建房公司/机构权威测评推荐排行榜。 - 苏木2025
  • 2025年中国砂光辊厂家推荐:看哪家技术实力强、产品质量优? - myqiye
  • 2025年全国抛丸机服务商排名,钢管抛丸机厂家/履带式抛丸机 - 工业品牌热点
  • 威榜单!2025年四川中药材种苗基地公司实力排名 - 朴素的承诺
  • 2025年上海继承律师权威精选榜单:离婚房产律所/婚姻律所/房产律所服务商推荐 - 品牌推荐官
  • 102302145 黄加鸿 数据采集与融合技术作业4
  • 想在沧县老家农村盖房子,靠谱的自建房公司口碑推荐。河北沧州沧县自建房公司 / 机构权威测评推荐排行榜 - 苏木2025
  • 医疗屏蔽房生产厂家哪家口碑好、实力强、信誉好? - 工业推荐榜
  • 2025PBT磨粉机厂家全攻略:深挖10家技术派服务商 - 栗子测评
  • 2025年郑州宠物美容学校排名TOP5权威推荐:甄选机构助力 - 工业品牌热点
  • 2025年上海婚姻律所权威推荐榜单:继承律所/房产律所/离婚事务所专业律师精选 - 品牌推荐官
  • 智谱免费模型
  • 2025年五大实力不错的美缝品牌企业推荐,诚信的美缝企业全解 - mypinpai
  • 2025年新疆电线电缆厂家权威推荐榜单:电线电缆/电缆价格/线缆源头厂家精选 - 品牌推荐官
  • 2025年中国五大磁导航专业厂家推荐:看哪家技术实力强? - 工业推荐榜
  • 2025年AI搜索排名服务公司推荐排行榜,AI搜索排名服务帮 - 工业品牌热点
  • 2025别墅入户门终极选购指南:十大品牌权威榜单揭晓 - 匠子网络
  • 实用指南:Flutter 应用怎么加固,多工具组合的工程化实战(Flutter 加固/Dart 混淆/IPA 成品加固/Ipa Guard + CI)
  • 2025驱动轮精品定制TOP5权威推荐:新型驱动轮靠谱厂家甄 - 工业推荐榜
  • 讲讲海泡石交货周期多久?哪家的交货速度快、品质优? - mypinpai
  • 2025上海离婚财产纠纷律师权威推荐榜单:离婚房产/遗嘱律师/婚姻律师源头服务商精选。 - 品牌推荐官
  • 剑指offer-48、不使⽤加减乘除实现加法
  • 2025年兰州餐桌椅生产商排行 - 2025年11月品牌推荐榜
  • 安装ROS环境