我平时项目开发必备框架
- Android上最强网络请求 Net
- Android上最强列表(包含StateLayout) BRV
- Android最强缺省页 StateLayout
- JSON和长文本日志打印工具 LogCat
- 支持异步和全局自定义的吐司工具 Tooltip
- 开发调试窗口工具 DebugKit
- 一行代码创建透明状态栏 StatusBar
该框架会自动生成某些方法(虽然这些方法可以使用AndroidStudio的快速生成), 但是代码量增加影响阅读性.
我希望我的POJO只存在字段即可;
- 添加依赖
compile "org.projectlombok:lombok:1.16.18"
annotationProcessor 'org.projectlombok:lombok:1.16.18'
插件和依赖需要都添加才有效
- 安装插件
- 启动animation progress
File
/DefaultSettings
/ Compiler, Annotation Processors
. 点击启用Annotation Processing
使用方法
构造方法
- @NoArgsConstructor
- @RequiredArgsConstructor
- @AllArgsConstructor
无参构造
@NoArgsConstructor(access = AccessLevel.PUBLIC, force = true, staticName = "of")
public class User {
private String name;
private int age;
}
- access 创建的构造方法的权限 默认
public
- force 对于final字段是否默认初始化
- staticName 是否生成静态方法创建实例(并且私有同参数构造方法)
有参构造
默认实现的有参构造方法只会实现 被final和@NonNull修饰的字段
@AllArgsConstructor要求所有字段都要作为构造方法参数, 不过不需要被@NonNull和Final修饰
@Getter/@Setter
@Getter
@Setter
public class User {
private String name;
private int age;
public User(String name, int age) {
this.age = age;
this.name = name;
}
}
@ToString
自动生成toString()
方法
@EqualsAndHashCode
自动生成Eaquls和HashCode的方法. 等同于IDE生成的.
@Builder
User user1 = User.builder().name("吴彦祖").age(22).build();
@Data
该注解等同于同时使用了以下注解
- @see Getter
- @see Setter
- @see RequiredArgsConstructor
- @see ToString
- @see EqualsAndHashCode
- @see Value
@Value
和@Data
的区别就是会给所有没有被@NonFinal
注解修饰的字段或者方法全部Final. 并且没有Setter
方法
并且被@Value
修饰的类也将被Final修饰, 无法被继承.
@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();
}
}
@NonNull
被该注解标注的变量会自动抛出空指针异常,需要自己捕捉异常, 否则程序崩溃;
val
无类型的本地变量. 类似JavaScript数据类型. 插件会根据上下文推断出数据类型;
@Synchronized
被注解修饰的方法或者变量会自动添加同步锁
@Singular
只能和@Builder
注解配合使用
@Singular("ba_mei") private List<String> girls;
// 使用
User.builder().ba_mei("新亘结衣").clearGirls();
@Accessors
@Data
@Accessors(chain = true, fluent = true, prefix = "n")
public class User {
private String nAme = "";
private Integer age;
@Singular("ba_mei")
private List<String> girls;
}
- chain Builder模式的Setter
- fluent 直接使用
字段名()
的构造方法 - prefix 对于驼峰命名有效, 忽略前缀