细心看一下 set 要领,这样的配置即是 chain 的 style,挪用的时辰,可以这样行使:
- Student student = new Student()
- .setAge(24)
- .setName("zs");
信托公道行使这样的链式代码,会更多的措施带来很好的可读性,那看一下假如行使 lombok 举办改进呢,请行使 @Accessors(chain = true),看如下代码:
- @Accessors(chain = true)
- @Setter
- @Getter
- public class Student {
- private String name;
- private int age;
- }
这样就完成了一个对付 bean 来讲很友爱的链式操纵。
静态结构要领
静态结构要领的语义和简化水平真的高于直接去 new 一个工具。好比 new 一个 List 工具,已往的行使是这样的:
- List<String> list = new ArrayList<>();
看一下 guava 中的建设方法:
- List<String> list = Lists.newArrayList();
Lists 定名是一种约定(俗话说:约定优于设置),它是指 Lists 是 List 这个类的一个器材类,那么行使 List 的器材类去发生 List,这样的语义是不是要比直接 new 一个子类来的更直接一些呢,谜底是必定的,再好比假若有一个器材类叫做 Maps,那你是否想到了建设 Map 的要领呢:
- HashMap<String, String> objectObjectHashMap = Maps.newHashMap();
好了,假如你领略了我说的语义,那么,你已经向成为 Java 措施员更近了一步了。
再回过甚来看方才的 Student,许多时辰,我们去写 Student 这个 bean 的时辰,他会有一些必输字段,好比 Student 中的 name 字段,一样平常处理赏罚的方法是将 name 字段包装成一个结构要领,只有传入 name 这样的结构要领,才气建设一个 Student 工具。
接上上边的静态结构要领和必传参数的结构要领,行使 lombok 将变动成如下写法(@RequiredArgsConstructor 和 @NonNull):
- @Accessors(chain = true)
- @Setter
- @Getter
- @RequiredArgsConstructor(staticName = "ofName")
- public class Student {
- @NonNull private String name;
- private int age;
- }
测试代码:
- Student student = Student.ofName("zs");
这样构建出的 bean 语义是否要比直接 new 一个含参的结构要领(包括 name 的结构要领)要好许多。
虽然,看过许多源码往后,我想信托将静态结构要领 ofName 换成 of 会先的越发简捷:
- @Accessors(chain = true)
- @Setter
- @Getter
- @RequiredArgsConstructor(staticName = "of")
- public class Student {
- @NonNull private String name;
- private int age;
- }
测试代码:
- Student student = Student.of("zs");
虽然他如故是支持链式挪用的:
- Student student = Student.of("zs").setAge(24);
这样来写代码,真的很简捷,而且可读性很强。
行使 builder
Builder 模式我不想再多表明白,读者可以看一下《Head First》(计划模式) 的制作者模式。
本日着实要说的是一种变种的 builder 模式,那就是构建 bean 的 builder 模式,着实首要的头脑是带着各人一路看一下 lombok 给我们带来了什么。
看一下 Student 这个类的原始 builder 状态:
- public class Student {
- private String name;
- private int age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public static Builder builder(){
- return new Builder();
- }
- public static class Builder{
- private String name;
- private int age;
- public Builder name(String name){
- this.name = name;
- return this;
- }
- public Builder age(int age){
- this.age = age;
- return this;
- }
- public Student build(){
- Student student = new Student();
- student.setAge(age);
- student.setName(name);
- return student;
- }
- }
- }
挪用方法:
- Student student = Student.builder().name("zs").age(24).build();
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|