Lombok的使用

2020-10-30  本文已影响0人  风月寒

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());
            }
        });
    }
}

上一篇下一篇

猜你喜欢

热点阅读