該框架會自動生成某些方法(雖然這些方法可以使用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 對於駝峰命名有效, 忽略字首