Java進階(二) Lombok 巧妙使用

  • lombok 支持的所有註解
Features
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger
@Data
@Builder
@Singular
@Delegate
@Value
@Accessors
@Wither
@SneakyThrows
from Intellij 14.1 @val
from Intellij 15.0.2 @var
from Intellij 14.1 @var
from Intellij 2016.2 @UtilityClass
Lombok config system
Code inspections
Refactoring actions (lombok and delombok)
  • @Getter 和 @Setter

添加 @Getter 和 @Setter 註解用在 Java Bean 類上面,無需生成 get/ set 方法,會自動生成所有的 get/ set 方法及一個默 認的構造方法

  • @ToString
  • 使用在類上,默認生成所有非靜態字段以下面的格式輸出,如

public String toString(){
    return "Person(userName=" + getUserName() + ", id=" + getId() + ", age=" + getAge() + ", address=" + getAddress() + ", memo=" + getMemo() + ")";
}
  • @NoArgsConstructor

        用在類上,用來生成一個默認的無參構造方法。

  • @RequiredArgsConstructor

      用在類上,使用類中所有帶有 @NonNull 註解和 final 類型的字段生成對應的構造方法,會生成一個包含常量,生成的構造方           法是私有的private。

  • @AllArgsConstructor

       用在類上,生成一個所有參數的構造方法,默認不提供無參構造方法。

  • @Data

用在類上,等同於下面這幾個註解合集。

  • @Getter

  • @Setter

  • @RequiredArgsConstructor

  • @ToString

  • @EqualsAndHashCode

  •      @Value

    用在類上,等同於下面這幾個註解合集。

  • @Getter

  • @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE)

  • @AllArgsConstructor

  • @ToString @EqualsAndHashCode

  • @NonNull

用在屬性上,用於字段的非空檢查,如果傳入到 set 方法中的值爲空,則拋出空指針異常,該註解也會生成一個默認的構造方法。

  • @Accessors(chain = true)

鏈式用法,如

@Accessors(chain = true)
@Setter
@Getter
public class Student {
    private String name;
    private int age;
}

使用
Student student = new Student()
        .setAge(24)
        .setName("zs");
  • @RequiredArgsConstructor(staticName = "of") 靜態構造方法
@Accessors(chain = true)
@Setter
@Getter
@RequiredArgsConstructor(staticName = "of")
public class Student {
        @NonNull private String name;
        private int age;
}

使用
Student student = Student.of("zs").setAge(24);
  • @Builder
@Builder
public class Student {
    private String name;
    private int age;
}

使用
Student student = Student.builder().name("zs").age(24).build();
  • @Delegate 代理註解
//以前
public abstract class FilterRestTemplate implements RestOperations {

    protected volatile RestTemplate restTemplate;

    protected FilterRestTemplate(RestTemplate restTemplate) {
            this.restTemplate = restTemplate;
    }

    @Override
    public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientException {
            return restTemplate.getForObject(url,responseType,uriVariables);
    }

    @Override
    public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
            return restTemplate.getForObject(url,responseType,uriVariables);
    }

    @Override
    public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException {
            return restTemplate.getForObject(url,responseType);
    }

    @Override
    public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables) throws RestClientException {
            return restTemplate.getForEntity(url,responseType,uriVariables);
    }
    //其他實現代碼略。。。
}


//lombok 代理註解,對restemplate 進行包裝器模式設計

@AllArgsConstructor
public abstract class FilterRestTemplate implements RestOperations {
    @Delegate
    protected volatile RestTemplate restTemplate;
}

 

  •  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章