lombok:減少常見的,重復的代碼開發(fā)

背景

今天學習時突然發(fā)現(xiàn)一個@Slf4j這個注解,是來自lombok的
之前只了解到getter和setter,看到這個于是去學習了一下。

lombok簡介

在官網(wǎng)上,lombok定了如下多種注解,
@Cleanup
@Getter, @Setter
@EqualsAndHashCode
@Constructor
@Data & @Value
@SneakyThrows
@Synchronize
@Getter(lazy=true)
@Log
等等,都是為了減少重復開發(fā)成本來用的

demo

比如針對getter和setter注解,官網(wǎng)的例子就是
用lombok

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;

public class GetterSetterExample {
  @Getter @Setter private int age = 10;
  
  @Setter(AccessLevel.PROTECTED) private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
}

效果等同于下面這段不用lombok

 public class GetterSetterExample {

  private int age = 10;

  private String name;
  
  @Override public String toString() {
    return String.format("%s (age: %d)", name, age);
  }
  
  public int getAge() {
    return age;
  }
  
  public void setAge(int age) {
    this.age = age;
  }
  
  protected void setName(String name) {
    this.name = name;
  }
}

爭議

看了下lombok有爭議的地方,主要在于他實現(xiàn)的原理上
http://jnb.ociweb.com/jnb/jnbJan2010.html#controversy
http://blog.enixjin.net/why-you-should-not-use-lombok/
http://blog.csdn.net/ghsau/article/details/52334762
主要在于他實現(xiàn)的原理(這里我沒有深入了解),網(wǎng)上說法是用了

使用非公開的API,在知道在javac編譯代碼時
annotation processor的實例一定是JavacAnnotationProcessor(接口AnnotationProcessor的內(nèi)部實現(xiàn))
直接使用強制類型轉(zhuǎn)換cast。再從JavacAnnotationProcessor的方法里面拿到抽象語法樹(AST)做修改。

源碼中比如AnnotationProcessorHider.java類就會去修改AST

個人理解

個人覺得適量用即可,比如@Log,@Getter,@Setter等即可
過多的引入,會影響代碼的可讀性。

refer

https://projectlombok.org/features/all 官網(wǎng)
http://himichaelchu.iteye.com/category/324280 使用demo集合

爭議,原理介紹
http://jnb.ociweb.com/jnb/jnbJan2010.html#controversy
http://blog.enixjin.net/why-you-should-not-use-lombok/
http://blog.csdn.net/ghsau/article/details/52334762

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 在此特此聲明:一下所有鏈接均來自互聯(lián)網(wǎng),在此記錄下我的查閱學習歷程,感謝各位原創(chuàng)作者的無私奉獻 ! 技術(shù)一點一點積...
    遠航的移動開發(fā)歷程閱讀 11,556評論 12 197
  • Lombok:讓JAVA代碼更優(yōu)雅關(guān)于Lombok,其實在網(wǎng)上可以找到很多如何使用的文章,但是很少能找到比較齊全的...
    it_zzy閱讀 1,966評論 1 8
  • 蘇州,在我的想象中,是個小而美,處處都有亭臺樓閣的南方城市。 一直想去,四月終于得到機會。公司組織去參觀學習,順便...
    檸檬悅兒閱讀 391評論 10 4
  • 各款女士 一、優(yōu)雅款 溫婉、柔媚、嫻靜、恬謐、淑雅、清麗……我見尤憐的神態(tài),溫文爾雅的舉止,襯托了優(yōu)雅型人裊裊婷婷...
    janeao閱讀 2,879評論 0 0

友情鏈接更多精彩內(nèi)容