java lombok ppt,Java开发神器Lombok的安装与使用

项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,虽然eclipse和idea开发环境下都有自动生成的快捷方式,但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok则不一样,使用了lombok的注解(@Setter,@Getter,@ToString,@@RequiredArgsConstructor,@EqualsAndHashCode或@Data)之后,就不需要编写或生成get/set等方法,很大程度上减少了代码量,而且减少了代码维护的负担。故强烈建议项目中使用lombok,去掉bean中get、set、toString、equals和hashCode等方法的代码。

一、IDEA安装Lombok

安装过程如下图

3c5b398cdc8c

2.png

3c5b398cdc8c

1.png

安装完成后,重启IDEA即可。

二、在pom中添加依赖

org.projectlombok

lombok

1.16.20

provided

三、Lombok常用注解

1、@Getter/@Setter注解为属性自动生成get/set方法。

@Setter

@Getter

public class User {

private Long id;

private String name;

private String password;

private String salt;

private Integer status;

private String address;

private String phone;

private Date lasttime;

}

2、@ToString注解,生成一个toString方法,默认的toString格式为:ClassName(fieldName= fieleValue ,fieldName1=fieleValue)。

@ToString

public class User {

private Long id;

private String name;

private String password;

private String salt;

private Integer status;

private String address;

private String phone;

private Date lasttime;

}

@ToString和下面的代码含义一样

@Override

public String toString() {

return "User{" +

"id=" + id +

", name='" + name + '\'' +

", password='" + password + '\'' +

", salt='" + salt + '\'' +

", status=" + status +

", address='" + address + '\'' +

", phone='" + phone + '\'' +

", lasttime=" + lasttime +

'}';

}

3、Val将变量申明为final类型。

val defaultCount = new ArrayList<>();

// 下面的代码和上面的含义一样

final List defaultCount = new ArrayList<>();

4、@NonNull注解能够为方法或构造函数的参数提供非空检查。

public void notNullExample(@NonNull String string) {

//方法内的代码

}

//=>上面代码相当于如下:

public void notNullExample(String string) {

if (string != null) {

//方法内的代码相当于如下:

} else {

throw new NullPointerException("null");

}

}

5、@Cleanup注解能够自动释放资源。

public void jedisExample(String[] args) {

try {

@Cleanup Jedis jedis = redisService.getJedis();

} catch (Exception ex) {

logger.error(“Jedis异常:”,ex)

}

//=>上面代码相当于如下:

Jedis jedis= null;

try {

jedis = redisService.getJedis();

} catch (Exception e) {

logger.error(“Jedis异常:”,ex)

} finally {

if (jedis != null) {

try {

jedis.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

6、@EqualsAndHashCode注解,自动生成equals和hashCode方法。

@EqualsAndHashCode(exclude = {"id"}, callSuper =true)

public class LombokDemo extends Demo{

private int id;

private String name;

private String gender;

}

//上面代码相当于如下:

public class LombokDemo extends Demo{

private int id;

private String name;

private String gender;

@Override

public boolean equals(final Object o) {

if (o == this) return true;

if (o == null) return false;

if (o.getClass() != this.getClass()) return false;

if (!super.equals(o)) return false;

final LombokDemo other = (LombokDemo)o;

if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;

if (this.gender == null ? other.gender != null : !this.gender.equals(other.gender)) return false;

return true;

}

@Override

public int hashCode() {

final int PRIME = 31;

int result = 1;

result = result * PRIME + super.hashCode();

result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());

result = result * PRIME + (this.gender == null ? 0 : this.gender.hashCode());

return result;

}

}

7、@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor,这几个注解分别自动生成了无参构造器、指定参数的构造器和包含所有参数的构造器。

@RequiredArgsConstructor(staticName = "of")

@AllArgsConstructor(access = AccessLevel.PROTECTED)

public class ConstructorExample {

private int x, y;

@NonNull private T description;

@NoArgsConstructor

public static class NoArgsExample {

@NonNull private String field;

}

}

//上面代码相当于如下:

@RequiredArgsConstructor(staticName = "of")

@AllArgsConstructor(access = AccessLevel.PROTECTED)

public class ConstructorExample {

private int x, y;

@NonNull private T description;

@NoArgsConstructor

public static class NoArgsExample {

@NonNull private String field;

}

}

public class ConstructorExample {

private int x, y;

@NonNull private T description;

private ConstructorExample(T description) {

if (description == null) throw new NullPointerException("description");

this.description = description;

}

public static ConstructorExample of(T description) {

return new ConstructorExample(description);

}

@java.beans.ConstructorProperties({"x", "y", "description"})

protected ConstructorExample(int x, int y, T description) {

if (description == null) throw new NullPointerException("description");

this.x = x;

this.y = y;

this.description = description;

}

public static class NoArgsExample {

@NonNull private String field;

public NoArgsExample() {

}

}

}

8、@Data注解作用比较全,其包含注解的集合@ToString,@EqualsAndHashCode,所有字段的@Getter和所有非final字段的@Setter, @RequiredArgsConstructor。其示例代码可以参考上面几个注解的组合。

9、@Builder注解提供了一种比较推崇的构建值对象的方式。

@Builder

public class BuilderExample {

private String name;

private int age;

@Singular private Set occupations;

}

//上面代码相当于如下:

public class BuilderExample {

private String name;

private int age;

private Set occupations;

BuilderExample(String name, int age, Set occupations) {

this.name = name;

this.age = age;

this.occupations = occupations;

}

public static BuilderExampleBuilder builder() {

return new BuilderExampleBuilder();

}

public static class BuilderExampleBuilder {

private String name;

private int age;

private java.util.ArrayList occupations;

BuilderExampleBuilder() {

}

public BuilderExampleBuilder name(String name) {

this.name = name;

return this;

}

public BuilderExampleBuilder age(int age) {

this.age = age;

return this;

}

public BuilderExampleBuilder occupation(String occupation) {

if (this.occupations == null) {

this.occupations = new java.util.ArrayList();

}

this.occupations.add(occupation);

return this;

}

public BuilderExampleBuilder occupations(Collection extends String> occupations) {

if (this.occupations == null) {

this.occupations = new java.util.ArrayList();

}

this.occupations.addAll(occupations);

return this;

}

public BuilderExampleBuilder clearOccupations() {

if (this.occupations != null) {

this.occupations.clear();

}

return this;

}

public BuilderExample build() {

Set occupations = new HashSet<>();

return new BuilderExample(name, age, occupations);

}

@verride

public String toString() {

return "BuilderExample.BuilderExampleBuilder(name = " + this.name + ", age = " + this.age + ", occupations = " + this.occupations + ")";

}

}

}

10、@Synchronized注解类似Java中的Synchronized 关键字,但是可以隐藏同步锁。

public class SynchronizedExample {

private final Object readLock = new Object();

@Synchronized

public static void hello() {

System.out.println("world");

}

@Synchronized("readLock")

public void foo() {

System.out.println("bar");

}

//上面代码相当于如下:

public class SynchronizedExample {

private static final Object $LOCK = new Object[0];

private final Object readLock = new Object();

public static void hello() {

synchronized($LOCK) {

System.out.println("world");

}

}

public void foo() {

synchronized(readLock) {

System.out.println("bar");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值