java中的链式编程

链式编程可以使得代码可读性高,链式编程的原理就是返回一个this对象,就是返回本身,达到链式效果,举个例子,下面是一个学生bean


  
  
  1. public class StudentBean {
  2. private String name;
  3. private int age;
  4. public String getName() {
  5. return name;
  6. }
  7. public StudentBean setName(String name) {
  8. this.name = name;
  9. return this;
  10. }
  11. public int getAge() {
  12. return age;
  13. }
  14. public StudentBean setAge(int age) {
  15. this.age = age;
  16. return this;
  17. }
  18. }

这段代码和传统的Bean区别就是我在set属性时候会返回一个this这样就达到了链式编程的效果


  
  
  1. public static void main(String[] args) {
  2. StudentBean studentBean = new StudentBean().setAge( 22).setName( "ly");
  3. System.out.println(studentBean.getAge());
  4. System.out.println(studentBean.getName());
  5. }

lombok其实已经提供该style,我们把这个bean改成lombok实现只需要加上一个@Accessors(chain = true)即可


  
  
  1. @Accessors(chain = true)
  2. @Getter
  3. @Setter
  4. public class StudentBean {
  5. private String name;
  6. private int age;
  7. }

这样代码简洁多了 ,而且实现了链式编程,那如何用lombok实现一个静态的链式编程呢,再回过头来看刚刚的StudentBean,很多时候,我们去写StudentBean这个bean的时候,他会有一些必输字段,比如StudentBean中的name字段,一般处理的方式是将name字段包装成一个构造方法,只有传入name这样的构造方法,才能创建一个StudentBean对象。

接上上边的静态构造方法和必传参数的构造方法,使用lombok将更改成如下写法(@RequiredArgsConstructor 和 @NonNull):


  
  
  1. @Accessors(chain = true)
  2. @Getter
  3. @Setter
  4. @RequiredArgsConstructor(staticName = "of")
  5. public class StudentBean {
  6. @NonNull private String name;
  7. private int age;
  8. }

测试方法:


  
  
  1. public static void main(String[] args) {
  2. StudentBean studentBean = StudentBean.of( "ly").setAge( 22);
  3. System.out.println(studentBean.getAge());
  4. System.out.println(studentBean.getName());
  5. }

这样不仅实现了链式编程,还实现了静态创建,那么怎么实现一个builder模式的链式Bean呢,build模式实现原理为在bean里面创建一个静态builder方法和一个静态内部Builder类,通过调用静态builder方法来创建Builder类,然后通过builder类中的build方法直接创建一个Bean,具体如下:


  
  
  1. public class StudentBean {
  2. private String name;
  3. private int age;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public int getAge() {
  11. return age;
  12. }
  13. public void setAge(int age) {
  14. this.age = age;
  15. }
  16. public static Builder builder() {
  17. return new Builder();
  18. }
  19. public static class Builder{
  20. private String name;
  21. private int age;
  22. public Builder name(String name) {
  23. this.name = name;
  24. return this;
  25. }
  26. public Builder age(int age) {
  27. this.age = age;
  28. return this;
  29. }
  30. public StudentBean build() {
  31. StudentBean studentBean = new StudentBean();
  32. studentBean.setName(name);
  33. studentBean.setAge(age);
  34. return studentBean;
  35. }
  36. }
  37. }

测试方法:

StudentBean studentBean = StudentBean.builder().name("ly").age(11).build();
  
  

这样就实现了一个builder模式的链式bean,其实用lombok就一个注解的事情,调用与上面同样


  
  
  1. @Builder
  2. public class StudentBean {
  3. private String name;
  4. private int age;
  5. }
                        <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#csdnc-thumbsup"></use>
                        </svg><span class="name">点赞</span>
                        <span class="count">3</span>
                        </a></li>
                        <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-Collection-G"></use>
                        </svg><span class="name">收藏</span></a></li>
                        <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xlink:href="#icon-csdnc-fenxiang"></use>
                        </svg>分享</a></li>
                        <!--打赏开始-->
                                                <!--打赏结束-->
                                                <li class="tool-item tool-more">
                            <a>
                            <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                            </a>
                            <ul class="more-box">
                                <li class="item"><a class="article-report">文章举报</a></li>
                            </ul>
                        </li>
                                            </ul>
                </div>
                            </div>
            <div class="person-messagebox">
                <div class="left-message"><a href="https://blog.csdn.net/u013822349">
                    <img src="https://profile.csdnimg.cn/4/0/1/3_u013822349" class="avatar_pic" username="u013822349">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/2x/6.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.csdn.net/u013822349" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">一念落叶</a></span>
                                            </div>
                    <div class="text"><span>发布了16 篇原创文章</span> · <span>获赞 15</span> · <span>访问量 2万+</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://im.csdn.net/im/main.html?userName=u013822349" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                        </a>
                                                            <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                    </div>
                            </div>
                    </div>
    
发布了45 篇原创文章 · 获赞 0 · 访问量 3517

链式编程可以使得代码可读性高,链式编程的原理就是返回一个this对象,就是返回本身,达到链式效果,举个例子,下面是一个学生bean

猜你喜欢

转载自blog.csdn.net/qq_44813090/article/details/104224709