什么是链式编程
链式编程就是可以通过方法. 的方式不断调用,其原理就是返回一个this对象,就是返回本身,达到链式效果。
我们经常用的 StringBuffer
就是实现了链式的写法。
StringBuffer builder = new StringBuffer(); builder.append("hello ").append("world ").append("java");
这样使用起来是不是很爽,其实就是在设值完之后返回当前this对象。
StringBuffer#append()
源码:
@Override @HotSpotIntrinsicCandidate public synchronized stringBuffer append(string str){ toStringCache = null; super.append(str); return this;
lombok 链式编程
引入依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency> 复制代码
@Accessors(chain = true)
lombok 提供该方式写法的实现,只需要在Bean对象上加上一个 @Accessors(chain = true)
即可。
@Accessors(chain = true) @Data public class Student { private String name; private int age; } 复制代码
通过观察可以看到set方法返回对象为自己,这样代码简洁多了 ,而且实现了链式编程。
Student Student0 i getName0: String h getAge0: int setName ( String ): Student h setAge ( int ): Student equals ( Object ): boolean TObject ? canEqual ( Object : boolean hashCode0: int 1ObjecttoString0: String tObject name : String age : int
lombok 静态的链式编程
静态的链式编程 比 普通的链式编程 的好处:
- 创建对象更简洁;
- 可以在静态方法、静态代码块等中使用;
- 对于必输字段,可以强制要求。
import lombok.*; import lombok.experimental.Accessors; @Accessors(chain = true) @Data @RequiredArgsConstructor(staticName = "of") public class Student { @NonNull private String name; private int age; } 复制代码
如下使用,这样不仅实现了链式编程,还实现了静态创建。
@Test public void test1(){ Student ss = Student.of("zhangsan").setAge(22); System.out.println(ss.getAge()); System.out.println(ss.getName()); } 复制代码
builder模式的链式Bean
builder模式的链式Bean原理为:在bean里面创建一个 静态builder方法 和一个 静态内部Builder类 ,通过调用静态builder方法来创建 Builder类,然后通过 Builder类 中的 build方法直接创建一个Bean,具体如下:
@Data public class StudentBean { private String name; private int 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 StudentBean build() { StudentBean studentBean = new StudentBean(); studentBean.setName(name); studentBean.setAge(age); return studentBean; } } } 复制代码
使用写法:
StudentBean studentBean = StudentBean.builder().name("zhangsan").age(11).build(); 复制代码
lombok 实现 builder模式的链式bean
这样就实现了一个builder模式的链式bean。其实用lombok就一个注解的事情。
import lombok.*; @Builder @Data public class StudentBean { private String name; private int age; }