面对工作中大量重复的,毫无技术含量 get()、set()方法,你是不是抱怨过?
那你听说过 Lombok 吗?
那你知道 Lombok 还有哪些鲜为人知的秘密吗?
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
Lombok 项目是一个 Java 库,它会自动插入您的编辑器和构建工具中,从而使您的 Java 更加生动有趣。永远不要再写另一个 getter 或 equals 方法,通过注解您的类有一个功能全面的生成器,自动化您的日志记录变量等等。
用@Data 代替所有成员的 getter,setter 方法,用@ToString 代替 toString 方法。
@ToString
@Data
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
private User user;
}
JSR 269:插件化注解处理 API(Pluggable Annotation Processing API)
原理图流程如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
安装完成后,可以在 Structure可以在 View -> Tool Windows -> Structure 或者 Alt +7中看到下图即安装成功:
可以放在成员上或者类上来生成 getter 和 setter 方法只对成员变量起作用,对于类变量不起作用,final 类型常量只有 getter 方法
@Getter(AccessLevel.PROTECTED)
这个就是将 getter 方法的类型修饰符变为 protected
@Getter(AccessLevel.NONE)
这个就是某些成员不想添加 getter 方法可以不添加.
@ToString
@Getter
public class Account implements Serializable {
private static final long serialVersionUID = 7063222791609347900L;
private Integer id;
private Integer uid;
private Double money;
@Getter(AccessLevel.NONE)
private User user;
}
功能:打印对象字符串
@ToString(exclude = ("money"))
打印的时候将 money 字段排除在外
@ToString(of =("成员变量或者静态变量") )
打印时只输出 of 里边的变量。
@EqualsAndHashCode (exclude = ("money"))
在生成的 equals,canEqual,hashCode 方法中不会出现 money 变量的比较。
帮助我们省掉一些判断是否为空的代码
public void test(@NonNull String s){
System.out.println(s);
}
@Test
public void test1(){
new Account().test(null);
}
结果:
java.lang.NullPointerException: s is marked non-null but is null
@NoArgConstructor无参构造器
@RequiredArgsConstructor(未赋值的 final 常量,加入@NonNull 的成员变量)
@AllArgConstructor`全参构造区
集成了
@Builder 类似于函数式编程,假如以后会生成
在你需要赋值的时候,你可以
@Data
@Builder
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
@Test
public void test1(){
Account account = Account.builder().id(1).uid(2).money(2.0).build();
System.out.println(account);
}
}
输出日志
val map = new HashMap<String,Integer>();
我们可以在定义的时候一律用val代替
比如最常见的 InputStream 流每次打开后都要关闭,我们可以在
@Cleanup Inputstream in = new FileInputStream("filepath");
这样我们可以省去关闭流的麻烦
OVER!如果这篇文章对你有帮助的话,不胜感激!!!
本文地址:https://blog.csdn.net/qq_43688587/article/details/107391678
如对本文有疑问, 点击进行留言回复!!
[杭电多校2020]第一场 1004 Distinct Sub-palindromes
Swift -- 将本地生成的UIImage进行持久化保存(存到文件中fileManager.createFile)
网友评论