1、链式编程在StringBulider中的使用
(1)链式编程的使用
@SpringBootTest @RunWith(SpringRunner.class) public class MyTest { private Logger log = Logger.getLogger("test"); @Test public void StringBuliderTest(){ StringBuilder stringBuilder=new StringBuilder().append("1").append("2").append(3).append(4); log.info(stringBuilder.toString()); } }
2021-01-20 17:18:00.733 INFO 8376 --- [ main] test : 1234
链式编程的写法能够使代码更加简洁可读性强
(2)源码
StringBulider:
@Override public StringBuilder append(String str) { super.append(str); return this; }
StringBulider的父类:AbstractStringBuilder
public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this; }
就是把拼接后的字符串返回
2、应用方法
(1)定义一个学生类
public class Student { private String name; private int age; private String address; public Student setName(String name) { this.name = name; return this; } public Student setAge(int age) { this.age = age; return this; } public Student setAddress(String address) { this.address = address; return this; } public String getName() { return name; } public int getAge() { return age; } public String getAddress() { return address; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + '}'; } }
return的是this,返回的是当前对象的引用(实际调用这个方法的实例化对象)
(2)测试
@Test public void testStudent(){ Student student=new Student().setName("tom").setAge(12).setAddress("河南"); log.info(student.toString()); }
2021-01-20 19:17:59.471 INFO 13508 --- [ main] test : Student{name='tom', age=12, address='河南'}
(3)还可以这样写
public class Student { private static Student student; private String name; private int age; private String address; public static Student Student() { student=new Student(); return student; } public Student setName(String name) { student.name = name; return student; } public Student setAge(int age) { student.age = age; return student; } public Student setAddress(String address) { student.address = address; return student; } public String getName() { return name; } public int getAge() { return age; } public String getAddress() { return address; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + '}'; } }
测试:
@Test public void testStudent(){ Student.Student().setName("tom").setAge(12).setAddress("河南"); }
3、Lombok中的链式编程
(1)需要添加注解@Accessors(chain = true)
@Getter @Setter @ToString @Accessors(chain = true) public class Student { private static Student student; private String name; private int age; private String address; }
测试:
@Test public void testStudent(){ Student student=new Student().setName("tom").setAge(12).setAddress("河南"); log.info(student.toString()); }
2021-01-20 19:45:15.780 INFO 3048 --- [ main] test : Student(name=tom, age=12, address=河南)