lombok链式编程

lombok链式编程

lombok能通过注解的方式,在编译时自动为属性生成构造器,getter/setter、equals、hashcode、toString方法。

1.添加依赖

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.16.14</version>
	<scope>provided</scope>
</dependency>

2.lombok实现静态的链式编程

把bean改成lombok添加**@Accessors(chain = true)**注解即可

package com.change.entity;

import lombok.Data;
import lombok.experimental.Accessors;

@Accessors(chain = true)
@Data
public class UserDemo {
    private Long id;
    private String username;
    private String password;
}

链式编程的使用

package com.change;

import com.change.entity.UserDemo;

public class demo {

    public static void main(String[] args) {
        UserDemo userDemo=new UserDemo();
        userDemo.setId(1L).setUsername("aa").setPassword("abc");
    }
}

3静态链式编程

静态链接编程创建对象更简洁,可以在静态方法,静态代码块等中使用,对于必输字段,也可以强制要求

3.1Lombok实现静态的链式编程

比如,创建Student对象是没有会要求一些必输字段,比如name字段必须有值,如果自己写

public class StudentBean {
 
	private String name;  
	private int age;
	
	
	private StudentBean(String name) {   //默认构造方法置为 private
	  	this.name = name;
	}
	
	public static StudentBean getInstance(String name) {  //唯一的 public 构造方法,name 不能为空
	 	if (name == null)
	    	throw new NullPointerException("name is not null"); 
	  	return new StudentBean(name);
	}  
	
	//------------  getter/setter  --------------
	public StudentBean setName(String name) { 
	  	this.name = name;
	  	return this;   // 返回this
	}
	
	public StudentBean setAge(int age) {
	 	this.age = age;
	  	return this;   // 返回this
	}  
	
	public String getName() {
	  	return this.name;
	} 
	
	public int getAge() {
	  	return this.age;
	}  
	
	public String toString() {
	  	return "StudentBean(name=" + getName() + ", age=" + getAge() + ")";
	}
}

使用lombok注解,实现静态的链式编程

@Accessors(chain = true)
@Data
@RequiredArgsConstructor(staticName = "getInstance")   //指定构造方法 
public class StudentBean {

	@NonNull
	private String name;
	
	private int age;
}

在使用的时候

package com.change;

import java.math.BigDecimal;

public class demo2 {
    public static void main(String[] args) {
        StudentBean studentBean = StudentBean.getInstance("lisi").setAge(20);
    }
}

@RequiredArgsConstructor原理

import lombok.NonNull;

public class StudentBean {

	  @NonNull
	  private String name;  
	  private int age;
	  
	   // 默认构造方法置为 private
	  private StudentBean(@NonNull String name) { 
		    if (name == null)
		      	throw new NullPointerException("name"); 
		    this.name = name;
	  }
	  
	   //唯一的 public 构造方法,name 不能为空
	  public static StudentBean getInstance(@NonNull String name) { 
	    	return new StudentBean(name);
	  }
	  	

	  //------------  getter/setter  --------------
	   public StudentBean setName(@NonNull String name) {
		   if (name == null)
		      throw new NullPointerException("name"); 
		   this.name = name;
		   return this;         // 返回this
	  }  
	  
	  public StudentBean setAge(int age) {
		  this.age = age;
		  return this;         // 返回this
	  }
	  
	  @NonNull
	  public String getName() {
	   	 return this.name;
	  }
	  
	  public int getAge() {
	  	  return this.age;
	  }

	 public String toString() {
	    return "StudentBean(name=" + getName() + ", age=" + getAge() + ")";
	 }

  	 // -- 省略 equals,canEqual ,hashCode--- 	
}
上一篇:Ubuntu linux例程:


下一篇:看测试小姐姐怎么使用钉钉机器人发定时任务(百分百偷懒版本)