| 仔细看一下 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(); 
 (编辑:鹰潭站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |