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

网站域名可以做端口映射吗许昌北京网站建设

网站域名可以做端口映射吗,许昌北京网站建设,在线代理网址,厦门关键词排名提升实体类常见的设计模式 1. Set 链式编程 在实体类中实现链式调用通常是指让 setter 方法返回当前对象实例(this),从而允许连续调用多个 setter 方法设置属性值。这种方式可以使代码更加简洁和直观。 例如实体类为: public clas…

实体类常见的设计模式

1. Set 链式编程

在实体类中实现链式调用通常是指让 setter 方法返回当前对象实例this),从而允许连续调用多个 setter 方法设置属性值。这种方式可以使代码更加简洁和直观。

例如实体类为:

public class Person {private String name;private int age;public Person setName(String name) {this.name = name;return this; // 返回当前实例以支持链式调用}public Person setAge(int age) {this.age = age;return this;}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + '}';}
}

使用:

Person person = new Person().setName("John").setAge(30);
System.out.println(person);

这种方式非常适合那些属性不是很多,或者不强制要求所有属性都必须初始化的情况。

可以使用 @Accessors(chain = true) 注解来自动启用链式调用(使用方式在后面)。

2. 构建者设计模式

当一个类有很多属性,特别是有些是可选的时候,使用传统的构造函数或链式 setter 方法可能会导致代码冗长且不易维护。构建者设计模式通过分离对象的构造过程与表示来解决这个问题,使得创建复杂对象的过程更加清晰和灵活。

例如实体类为:

public class Person {private final String name;private final int age;// 私有构造函数,防止直接实例化private Person(Builder builder) {this.name = builder.name;this.age = builder.age;}public static class Builder {private String name;private int age;public Builder name(String name) {this.name = name;return this; // 返回当前 Builder 实例以支持链式调用}public Builder age(int age) {this.age = age;return this;}public Person build() {return new Person(this); // 使用 Builder 中的数据创建新的 Person 实例}}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + '}';}
}

使用:

Person person = new Person.Builder().name("John").age(30).build();
System.out.println(person);

构建者模式特别适用于需要构建的对象具有许多可选参数的情况。它不仅提高了代码的可读性,也避免了构造函数参数列表过长的问题。

可以使用 @Builder 注解可以轻松实现构建者模式(使用方式在后面)。

3. 其它

3.1 两者与 Lombok 一同使用的问题

Lombok 是一个非常流行的 Java 库,它通过注解来减少样板代码,例如 getter、setter、构造函数等。然而,当你在同一个类中同时使用 Lombok 注解与手动实现的 Set 链式编程或构建者设计模式时,可能会遇到一些问题或冲突。

  1. Set 链式编程与 Lombok

    如果你使用 Lombok 的 @Setter 注解,并尝试手动实现链式 setter 方法,可能会出现以下问题:

    1. 方法重复
    2. 不可预期的行为

    为了解决这个问题,你可以选择不使用 Lombok 的 @Setter 注解,而是完全手动编写所有需要的 setter 方法,或者利用 Lombok 的 @Accessors(chain = true) 注解来自动启用链式调用。例如:

    @Getter @Setter @Accessors(chain = true)
    public class Person {private String name;private int age;
    }
    
  2. 构建者设计模式与 Lombok

    Lombok 提供了对构建者模式的支持,通过 @Builder 注解可以轻松实现构建者模式,避免手动编写复杂的 Builder 类。但是,如果同时手动实现构建者模式和使用 Lombok 的 @Builder 注解,则可能会遇到类似的问题:

    • 代码冗余
    • 冲突

    为了避免这种情况,你应该选择一种方式来实现构建者模式。如果你希望利用 Lombok 简化代码,可以删除手动编写的 Builder 实现,转而使用 Lombok 的 @Builder 注解:

    @Getter
    @Builder
    public class Person {private final String name;private final int age;
    }
    

总之,在结合使用 Lombok 与自定义的 Set 链式编程或构建者设计模式时,关键是保持一致性并理解 Lombok 在背后所做的工作。通常情况下,推荐充分利用 Lombok 提供的相关注解来简化这些模式的实现,除非有特定的需求要求手动控制。这样做不仅可以减少出错的机会,还能让代码更加简洁易读。

3.2 又想方便编程、又想使用 Lombok 怎么做

  1. 使用 @Accessors(chain = true) 和其他 Lombok 注解

    当你想为你的实体类启用链式 setter 方法同时又希望自动生成 toStringequalshashCode 方法时,你可以这样做:

    @Getter @Setter @Accessors(chain = true)
    @ToString
    @EqualsAndHashCode
    public class Person {private String name;private int age;
    }
    

    在这个例子中,@Getter@Setter 自动生成所有属性的 getter 和 setter 方法,@Accessors(chain = true) 使得 setter 方法支持链式调用。@ToString 自动生成 toString 方法,而 @EqualsAndHashCode 自动生成 equalshashCode 方法。

  2. 使用 @Builder 和其他 Lombok 注解

    如果你想使用构建者模式(通过 @Builder 注解),同时还需要 toStringequalshashCode 方法,同样可以直接将这些注解添加到你的类上:

    @Getter // 注意:通常与 @Builder 一起使用时不需要 @Setter,除非你确实需要setter方法
    @Builder
    @ToString
    @EqualsAndHashCode
    public class Person {private String name;private int age;
    }
    

    这里需要注意的是,通常当你使用 @Builder 时,你可能不会为所有字段提供 setter 方法(因为 Builder 模式本身提供了设置属性值的方法)。然而,如果你确实需要 setter 方法,你可以继续使用 @Setter 注解。

3.3 总结

虽然使用了 Set 链式编程、构建者设计模式 能更方便快捷的实现一个类,但是也产生了与 Lombok 之间的冲突,导致不能直接使用类似 @Data 等注解生成一些方法,但这个问题总的来说,是可以忽略的。

毕竟鱼和熊掌不可兼得,合适的场景使用合适的方法即可。


文章转载自:

http://7R4yC7eX.xjmzy.cn
http://wRqfpSrt.xjmzy.cn
http://6trGl60R.xjmzy.cn
http://85Q0msIo.xjmzy.cn
http://ZfMjdA2z.xjmzy.cn
http://UiWXKbeN.xjmzy.cn
http://wwZXD5y7.xjmzy.cn
http://TO2ixqg8.xjmzy.cn
http://NtBCcdGZ.xjmzy.cn
http://N0HTvmAG.xjmzy.cn
http://JkAbTwO0.xjmzy.cn
http://6tMnT8Dk.xjmzy.cn
http://4rkcPl6a.xjmzy.cn
http://flHML0TK.xjmzy.cn
http://9deoMdfV.xjmzy.cn
http://LSff4QKD.xjmzy.cn
http://gDSVHFRB.xjmzy.cn
http://olLssOMt.xjmzy.cn
http://Wofucb9G.xjmzy.cn
http://CKKSXqpS.xjmzy.cn
http://TMCKvlSM.xjmzy.cn
http://MIuXfK0p.xjmzy.cn
http://A9ynsDVa.xjmzy.cn
http://qeertF4J.xjmzy.cn
http://yKN0PPzI.xjmzy.cn
http://uIM4yix5.xjmzy.cn
http://JWcyNmgb.xjmzy.cn
http://qnyiM3fP.xjmzy.cn
http://jDXHG2VH.xjmzy.cn
http://9foO8KPQ.xjmzy.cn
http://www.dtcms.com/wzjs/657927.html

相关文章:

  • 网站建设主管制作网站
  • python做网站点登入没反映做网站要要多少钱
  • 东莞企业建站公司wordpress登入修改
  • 网站建立者个人简历怎么写简短又吸引人
  • 苏州制作网站的公司哪家好个人网站的基本风格
  • 谁知道做网站的电话上海公司注册一网通办
  • DW做旅游网站毕业设计模板wordpress标题去重
  • 电子商务网站计划书花都定制型网站建设
  • 网站建设费用预算模板推广哪个app最挣钱
  • 做电影网站需要注意什么软件温州企业模板建站
  • 微信端的网站开发pythonwordpress匿名评论插件
  • 贵州交通建设集团网站房产网站设计公司
  • 网站建设无底薪提成珠海网站建设陈玉铭
  • 如何在网站上添加qqphpcms内容管理系统
  • 鹰潭律师网站建设手机网站表单页面制作
  • 网站建设自学需要多久做任务得钱的网站
  • 浙江省住房和城乡建设厅网官方网站华为云助力企业网站安全保障
  • it网站设计培训成都 视频网站建设
  • 佛山做外贸网站特色东莞 网站制作
  • 青岛网站制作计划论坛网站 备案
  • 合肥专业做网站的公司哪家好比较好的做外贸网站
  • 网站开发获取用户微信号登录青岛app下载
  • vue做的网站百度抓取什么是平台网站
  • 做娃衣的布料去哪个网站坪山城市建设局官方网站
  • 水务公司网站建设方案公司内部网站一般都怎么维护
  • 站酷网素材图库海报设计网站怎么建立视频
  • 网站建设与管理好过吗vps服务器怎么创建多个网站
  • 网站大全官网应用关键词优化
  • 神州网站制作福州做网站公司
  • 海商网做网站价格滨州公司网站建设推广