lombok@RequiredArgsConstructor注解解析

更新时间:2023-07-08 13:53:54 阅读: 评论:0

lombok@RequiredArgsConstructor注解解析
关于lombok,常⽤的⽅法已经烂⼤街了,今天挖掘点不⼀样的。在项⽬中,当我们某个类的属性过多时,如果使⽤构造⽅法创建对象那将是⼀件很恐怖的事情,我甚⾄不知道每个参数对应的是什么意思,因此最常规的解决⼿段是按需添加⼀个初始化对象的静态⽅法,由于不是所有的属性都需要⾃定义,因此,这个⽅法就⽐较⼈性化,也让代码更加易于理解和使⽤:
class Car{
private String origin ="德国";
private String model;
private Car(String model){
}
public static Car of(String model){
return new Car(model);
}
}
或者我们也可以使⽤builder模式来做:
class Car{
private String origin;
private String model;
private Car(String model){
}
private Car(Builder builder){
}
社区养老
public static Car of(String model){
return new Car(model);
}
public static Builder builder(){
return new Builder();
婴儿需要补钙吗}
public static class Builder{
真假蜂蜜的鉴别方法
private String origin;
private String model;
public Builder origin(String origin){
return this;
}
public Builder model(String model){
return this;
}
老公生日蛋糕>幸福离你有多远
public Car build(){
外墙面砖
return new Car(this);
博字五笔怎么打
游戏古风名字}
}
}
如果每个类都要这么写,那不是要把⼈累死,所以,就有了轮⼦来帮我们完成这些枯燥的操作,相信使⽤过lombok的⼩伙伴肯定不少,不过可能⼤多数⼩伙伴⽤的最多的⼀定是@Data、@Getter这些⽤来代替getter和tter⽅法的注解,所以今天我们就利⽤lombok来让我们上⾯的代码简化。
对象初始化的静态⽅法:
@Data
@RequiredArgsConstructor(staticName ="of")
class Car{
@NonNull
private String origin;
@NonNull
private String model;
}
源码剖析(查看⽣成的class⽂件反编译的java代码):
class Car{
@NonNull
private String origin;
@NonNull
private String model;
// 省略get、t⽅法
private Car(@NonNull String origin,@NonNull String model){
if(origin ==null){
throw new NullPointerException("origin is marked @NonNull but is null");
}el{
}
if(model ==null){
throw new NullPointerException("model is marked @NonNull but is null");
}el{
}
}
public static Car of(@NonNull String origin,@NonNull String model){
return new Car(origin, model);
}
}
通过对源码的查阅之后发现,@RequiredArgsConstructor注解实际上做了两件事:1、添加了⼀个实例化对象的静态⽅法;2、添加了⼀个私有构造⽅法服务于该静态⽅法,在需要⾃定义的字段上⾯加⼊@NonNull后,这些字段就会按照属性在类中声明的先后顺序作为该⽅法的形参,同时会对这些字段做⾮空验证,如果为空就会报空指针异常,这是⼀个坑,需要注意。关于建造者模式,代码其实和我们上⾯⼿写的没有太⼤出⼊,所以这⾥就不做分析了。

本文发布于:2023-07-08 13:53:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1085582.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:代码   需要   源码   静态   对象   操作
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图