Lombok @Data @Builder

Lombok 功能

@Data 注解,省去实体类中大量的get()和set()方法。

@Builder 注解,创建生成器。

各种其他注解

使用效果

然后就可以正常使用实体类了。

依赖

使用@Data等注解前,需要先安装Lombok插件。安装方法会在后文介绍。

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

@Data

实体类

package com.example.datademo.web;

import java.util.Date;
import java.util.List;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;

import lombok.Data;

@Data
public class StudentVO {

	@NotBlank
	@Size(min = 2, max = 5)
	private String name;

	@NotNull
	@Min(18)
	@Max(200)
	private Integer age;

	@NotEmpty
	private List<Integer> courseIds;

	@NotNull
	@DateTimeFormat(iso = ISO.DATE)
	private Date graduationDate;

}

接口内调用

package com.example.datademo.web;

import javax.validation.Valid;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("example")
public class ExampleController {

	@GetMapping("test")
	public String test() {
		return "test ok!";
	}

	@GetMapping("student")
	public StudentVO getStudent(@Valid StudentVO vo) {
		String name = vo.getName();
		vo.setName(name);
		return vo;
	}

}

接口内调用效果

单独调用 get() 和 set() 方法

 实体类的 get()、set() 方法是可以正常使用的。

单独调用 toString() 方法

@Builder

代码

package com.example.datademo.web;

import lombok.Builder;

@Builder
public class Dialog {

	private String tile;
	private String content;
	private String positiveButtonText;
	private String negativeButtonText;

	interface OnClickListenter {
		void onClick();
	}

	private OnClickListenter positiveButtonListener;

	public void run() {
		positiveButtonListener.onClick();
	}

}

  

使用

	public static void main(String[] args) {
		Dialog dialog = Dialog.builder()
				.tile("标题")
				.content("内容")
				.positiveButtonText("确定")
				.negativeButtonText("取消")
				.positiveButtonListener(() -> {
					System.out.println("回调");
				})
				.build();
		System.out.println("运行");
		dialog.run();
	}

结果

@Singular

生成一个方法,用来向集合内添加一个元素。需要和@Builder一起用。

package com.example.vodemo.employee;

import java.util.List;

import lombok.Builder;
import lombok.Data;
import lombok.Singular;

@Data
@Builder
public class Student1 {
	private Long id;

	private String name;

	@Singular("addHobby")
	private List<String> hobby;

	public static void main(String[] args) {
		Student1 student = Student1.builder().id(300L).name("赵三").addHobby("篮球").addHobby("游泳").build();
		System.out.println(student.toString());
	}
}

val 和 var

	public void testValAndVar() {
		val student = new StudentVO();
//		student = new StudentVO(); // val不可变
		var student2 = new StudentVO();
		student2 = new StudentVO();
	}

@FieldNameConstants

package com.example.vodemo.employee;

import lombok.Data;
import lombok.experimental.FieldNameConstants;

@Data
@FieldNameConstants
public class StudentVO {
	private Long id;
	private String name;
}
	public void field() {
		System.out.println(StudentVO.Fields.id);
		System.out.println(StudentVO.Fields.name);
	}

@Accessors(chain = true) - 实验性注解

package com.example.vodemo.employee;

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

@Data
@Accessors(chain = true)
public class Student2 {
	private Long id;

	private String name;

	public static void main(String[] args) {
		Student2 vo = new Student2();
		vo.setId(200L).setName("赵二");
		System.out.println(vo.toString());
	}
}

@Accessors(fluent = true) - 实验性注解

package com.example.vodemo.employee;

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

@Data
@Accessors(fluent = true)
public class Student {
	private Long id;
	private String name;

	public static void main(String[] args) {
		Student student = new Student();
		student.id(100L).name("张三");
		System.out.println(student.toString());
		System.out.println(student.id());
		System.out.println(student.name());
	}
}

  

其他注解

Equals方法和HashCode方法包含哪些字段

  • @EqualsAndHashCode(of = { "id", "name" })

构造器的访问级别

  • AccessLevel.PUBLIC
package com.example.vodemo.employee;

import java.util.List;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.Singular;
import lombok.experimental.Accessors;
import lombok.experimental.FieldNameConstants;

@Data
@EqualsAndHashCode(of = { "id", "name" })
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class StudentVO {
	private Long id;
	private String name;
}
package com.example.vodemo.employee;

import java.io.FileInputStream;
import java.io.IOException;

import lombok.Cleanup;
import lombok.SneakyThrows;
import lombok.Synchronized;

public class Test2 {
	@SneakyThrows
	public void testThrow() {
		Thread.sleep(1000);
	}

	@Synchronized
	public void sync() {

	}

	public void cleanup(String pathname) throws IOException {
		@Cleanup
		FileInputStream stream = new FileInputStream(pathname);
	}
}

Lombok安装及依赖

@Data注解,需要将Lombok插件安装到IDE中,并在pom.xml中添加依赖。

1. 官网下载jar包

Download (projectlombok.org)

2.安装

Windows平台

双击下载好的lombak.jar,安装步骤如下:

关闭弹出的警告窗口,点击 Specify location…

 

 D:\app\sts

这是我的STS的安装目录

 

重启STS ,安装就可以生效了。

Mac平台

  1. 进入到SpringToolSuite4.app包内容,将lombok.jar复制到和SpringToolSuite4.ini同级目录下;
  2. 在当前目录下启动终端,运行java -jar lombok.jar,选择到SpringToolSuite4.ini,点击install即可完成安装;

  

引入Lombok依赖

已存在的项目,可以直接在pom.xml中添加依赖。之后可能需要clean一下项目。

新建springboot项目时,可以直接选择添加lombok依赖。

参考

Lombok官网 - 注解(稳定版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋冠巡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值