Lombok是一个编译时帮助我们生成类的getter、setter、toString等的第三方库,让我们不需要给实体类手动写getter、setter。
集成
1、安装插件
File => Settings => Plugins,插件市场搜索Lombok,安装,重启工具
2、添加Lombok依赖
//1、lombok依赖
implementation 'javax.annotation:javax.annotation-api:1.2'
//依赖lombok的API,内部虽然已经声明了注解解释器,但在AndroidStudio上有Bug(导致编译报错找不到生成的方法),需要自己主动再声明一次
implementation 'org.projectlombok:lombok:1.16.6'
//主动声明注解解释器
annotationProcessor 'org.projectlombok:lombok:1.16.6'
3、添加Lombok配置文件
在项目根目录,添加lombok.config文件,填入以下内容
lombok.anyConstructor.suppressConstructorProperties=true
config.stopBubbling=true
lombok.equalsAndHashCode.callSuper=call
4、配置注解处理器
模块的build.gradle文件,找到defaultConfig,加入以下配置,同步一下即可
defaultConfig {
//3.配置注解处理器
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true
}
}
}
注解说明
AllArgsConstructor
生成全参数的构造函数
@AllArgsConstructor(staticName = "of")
使用这个参数可以将构造函数变成静态工厂类。此时不可以再new,只能使用静态工厂类。
@AllArgsConstructor(access = AccessLevel.PROTECTED)
用这个可以控制访问范围,比如 public、private
Builder
生成builder模式的类
Cleanup
关闭资源,比如IO流对应的对象,加入该注解,可以自动关闭流
Data
对对应的对象生成get()/set()/需要参数的构造方法/toString()/hashcode()
Getter
生成get()
@Getter(lazy=true)
延迟加载
可用于类和成员变量
对于某些操作可以不必在初始化的时候加载而是等到了需要再去加载,此时就需要进行延迟加载
对于字段,需要final
NoArgsConstructor
生成没有参数的构造方法
NonNull
参数不为null
RequiredArgsConstructor
生成一个或多个参数的构造函数
需要注意的是,这个注解只会对final和@NonNull字段生成对应参数的构造函数。
Setter
生成set()
SneakyThrows
抛异常
Synchronized
同步
ToString
生成toString()
val
变量或对象为final
@Value
与@Data相似,区别是不再提供@Setter,每个成员变量都是final和private的,实例化需要提供所有参数用于初始化
具体使用
先创建一个User类
@Data
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
private String name;
private int age;
}
然后在activity里面直接调用
public class MainActivity extends AppCompatActivity {
private TextView textView;
private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.tv);
user = new User("zzf",18);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(user.getName() +"---"+user.getAge());
}
});
}
}
网友评论