LomBok簡化POJO

Lombok Pluginjava

該框架會自動生成某些方法(雖然這些方法可使用AndroidStudio的快速生成), 可是代碼量增長影響閱讀性.git

我但願個人POJO只存在字段便可;github

  1. 添加依賴
compile "org.projectlombok:lombok:1.16.18"
    annotationProcessor 'org.projectlombok:lombok:1.16.18'
複製代碼

插件和依賴須要都添加纔有效bash

  1. 安裝插件
  1. 啓動animation progress

File/DefaultSettings/ Compiler, Annotation Processors. 點擊啓用Annotation Processing框架

使用方法

構造方法

  • @NoArgsConstructor
  • @RequiredArgsConstructor
  • @AllArgsConstructor

無參構造ui

@NoArgsConstructor(access = AccessLevel.PUBLIC, force = true, staticName = "of")
public class User {
    private String name;
    private int age;
}
複製代碼
  • access 建立的構造方法的權限 默認public
  • force 對於final字段是否默認初始化
  • staticName 是否生成靜態方法建立實例(而且私有同參數構造方法)

有參構造this

默認實現的有參構造方法只會實現 被final和@NonNull修飾的字段spa

@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 對於駝峯命名有效, 忽略前綴
相關文章
相關標籤/搜索