Lombok使用学习

一、@Data

  1. @Data()提供一个包含有final修饰的属性的构造方法
    原代码:
@Data
public class ServiceLevelOutVO {
    private final String road;
}

编译后:

@Data
public class ServiceLevelOutVO {
    private final String road;
	public ServiceLevelOutVO(String road) {
        this.road = road;
    }
    // ... 省略equals等方法
}
  1. @Data(staticConstructor = “of”),提供一个以of为方法名以及包含有final修饰的属性的构造方法。

原代码:

@Data(staticName = "of")
public class ServiceLevelOutVO {
    private final String road;
}

编译后:

@Data(staticName = "of")
public class ServiceLevelOutVO {
	private final String road;
	
	private ServiceLevelOutVO(String road) {
        this.road = road;
    }

	public static ServiceLevelOutVO of(String road) {
        return new ServiceLevelOutVO(road);
    }
    // ... 省略equals等方法
}
  1. 以上的前提是没有使用lombok有关提供构造方法的注解、没有手动编写构造函数
@Data(staticName = "of")
@AllArgsConstructor
public class ServiceLevelOutVO {
	private final String road;
	
	public ServiceLevelOutVO(String road, String updateTime, List<String> period, List<Float> level) {
        this.road = road;
        this.updateTime = updateTime;
        this.period = period;
        this.level = level;
    }
    // ... 省略equals等方法
}

二、@RequiredArgsConstructor

  1. @RequiredArgsConstructor()生成带有必需参数的构造函数、必要参数的判定条件是该类中被final修饰的属性

原代码:

@RequiredArgsConstructor
public class ServiceLevelOutVO {
    private final String road;
}

编译后的代码:

@RequiredArgsConstructor
public class ServiceLevelOutVO {
	private final String road;
	public ServiceLevelOutVO(String road) {
        this.road = road;
    }
}
  1. @RequiredArgsConstructor(staticName = “init”),会生成一个以init为方法名的静态方法以及一个包含必需参数的构造方法进行初始化。
    原代码:
@RequiredArgsConstructor(staticName = "init")
public class ServiceLevelOutVO {
    private final String road;
}

编译后的代码:

@RequiredArgsConstructor(staticName = "init")
public class ServiceLevelOutVO {
	private final String road;
	
	private ServiceLevelOutVO(String road) {
        this.road = road;
    }

	public static ServiceLevelOutVO init(String road) {
        return new ServiceLevelOutVO(road);
    }
}

三、@Getter、@Setter

为实体类属性提供get、set方法

四、 @NotNull

用于校验属性非空,如果为空则抛出异常

@Data
public class ServiceLevelOutVO {
	@NotNull(message = "road不能为空")
    private final String road;
}

五、@Cleanup

样例代码:

public void testCleanUp() {
    try {
        @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
        baos.write(new byte[] {'Y','e','s'});
        System.out.println(baos.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

等价于 Java 源码:

public void testCleanUp() {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            baos.write(new byte[]{'Y', 'e', 's'});
            System.out.println(baos.toString());
        } finally {
            baos.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

六、@EqualsAndHashCode、@ToString

  1. @EqualsAndHashCode为实体类提供equals和hasCode方法
  2. @ToString提供toString方法

七、@SneakyThrows

标记在方法上不需要手动throw异常

@SneakyThrows
public void testSneakyThrows() {
    throw new IllegalAccessException();
}

八、@Synchronized

private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");

@Synchronized
public String synchronizedFormat(Date date) {
    return format.format(date);
}

等价于

private final java.lang.Object $lock = new java.lang.Object[0];
private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");

public String synchronizedFormat(Date date) {
    synchronized ($lock) {
        return format.format(date);
    }
}

九、@Builder

@Builder提供一套建造者模式的代码,调用时可以使用链式进行实体构建

  • builderMethodName:指定创建内部静态类的方法名,默认值为 builder

  • buildMethodName:指定创建实体类的方法名,默认值为 build

  • builderClassName:指定内部静态的类名,默认值为 “”,默认创建的类名为thisclassBuilder

  • toBuilder:设置为 true 可以对这个对象进行拷贝生成新的对象,可以再修改,默认为 false

  • access:设置 builderMethodName 的访问权限修饰符,默认为 public
    共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE,其中 MODULE 是 Java 9 的新特性

  • setterPrefix:设置 setter 方法的前缀,默认为 “”

调用:

ServiceLevelOutVO outVO = ServiceLevelOutVO.builder().road("北京路").build();

原代码:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ServiceLevelOutVO {
   private String road;
}

编译后:

public class ServiceLevelOutVO {
    private String road;
    
    public static class ServiceLevelOutVOBuilder {
        private String road;
        private String updateTime;
        private List<String> period;
        private List<Float> level;

        ServiceLevelOutVOBuilder() {
        }

        public ServiceLevelOutVOBuilder road(String road) {
            this.road = road;
            return this;
        }

        public ServiceLevelOutVOBuilder updateTime(String updateTime) {
            this.updateTime = updateTime;
            return this;
        }

        public ServiceLevelOutVOBuilder period(List<String> period) {
            this.period = period;
            return this;
        }

        public ServiceLevelOutVOBuilder level(List<Float> level) {
            this.level = level;
            return this;
        }

        public ServiceLevelOutVO build() {
            return new ServiceLevelOutVO(this.road, this.updateTime, this.period, this.level);
        }

        public String toString() {
            return "ServiceLevelOutVO.ServiceLevelOutVOBuilder(road=" + this.road + ", updateTime=" + this.updateTime + ", period=" + this.period + ", level=" + this.level + ")";
        }
    }
}

参考文献
https://hezhiqiang8909.gitbook.io/java/docs/javalib/lombok
https://blog.csdn.net/qq_39249094/article/details/120881578

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值