發現神奇的lombok
專案主頁:http://projectlombok.org/index.html
原始碼github主頁:https://github.com/rzwitserloot/lombok/tree/master/src
lombok這個名字很大名鼎鼎的j2ee外掛lomboz十分相像。lombok貌似也是一個外掛,但是它的功能強大得有些讓人難以置信。
我們先來看看為什麼需要lombok?
lombok是一種程式碼生成器,它可以為我們生成如下一些程式碼:
1.封裝屬性的Getter Setter程式碼
2.參構造器
3.靜態工廠
4.預設的toString()和equals()
另外lombok還製造了非常有趣的一些語法糖,如下舉了一些例子:
1.使用val做泛型自動推斷(用val估計是考慮到jdk以後版本會使用var關鍵字)
2.使用@CleanUp自動關閉流
3.使用@SneakyThrows來包裝Exception為RuntimeException。
這樣看下來,lombok的目標已經顯而易見了。它和jquery一樣,目標是讓程式設計師寫更少的程式碼,以及改進一些原始語法中不盡人意的地方。
lombok能做到這一點。既不是用annotations process,也不是用反射。而是直接黑到了編譯過程。
而我們如果想要享受lombok所帶來的神器效果,需要做的僅僅只是將lombok像普通jar包一樣匯入工程即可。
是否很奇妙呢?趕緊試試吧,下面是我貼出的一段例項程式碼:
package lombok;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//只可以指定of(白名單)和exclue(黑名單)之一。
@ToString(of={"name","both"},doNotUseGetters=true,includeFieldNames=true,callSuper=false) //等於Eclipse的重構Generator特性。
@RequiredArgsConstructor(access=AccessLevel.PUBLIC,staticName="newTestByFactory") //僅針對final系列強制初始化
@AllArgsConstructor(access=AccessLevel.PROTECTED) //構造包含所有memeber引數的構造器,可指定access級別
@EqualsAndHashCode(exclude={"both"},doNotUseGetters=true) //與ToString系列的規則基本相同
public class GenerateMemeber {
@Getter(value=AccessLevel.PROTECTED,lazy=true) private final int[] foo=expensiveCreate();//構造Getter,可以宣告為lazy來獲取僅初始化一次的物件。注意該物件必須為final型別
@Getter @Setter(AccessLevel.PROTECTED) private int both;//可以指定Setter為特殊訪問限定符
//事實上在類載入階段即立即產生了
private int[] expensiveCreate() {
System.out.println("lazy create it!");
int[] large=new int[1000];
for(int i=0;i<large.length;i++) large[i]=i;
return large;
}
private Foo inner=new Foo();
@NonNull final String name;//標記為NonNull的若在構造階段獲得null,則自動丟擲異常
@ToString //ToString不能深層次的處理。只是簡單呼叫object.toString() 故需要對自定義型別再次標註
public static class Foo{
String a="123";
List<Integer> list=Arrays.asList(5,8,4,2,1);
}
public static void main(String[] args) {
//測試lazy
GenerateMemeber test=new GenerateMemeber("tester");
System.out.println(test.toString());
System.out.println(test.getFoo());
System.out.println(test.getFoo());
//測試型別推斷
val playList=new ArrayList<String>();
playList.add("1");
playList.add("2");
System.out.println(playList);
//測試工廠方法和非空
GenerateMemeber test2=GenerateMemeber.newTestByFactory(null);
System.out.println(test2);
}
}
事後本人想嘗試在android中使用lombok。可惜並沒有成功,lombok中針對Constructor指定的AccessLevel不知為何沒有效果。而lombok1.3MB的龐大體積對於android專案來說又是體積過大。eclipse上提示編譯成功並生成apk包後,卻無法最終安裝。嘗試用winrar也無法開啟apk包,看來lombok做的編譯手腳已經影響到打包了。
雖然在移動平臺上lombok使用失敗了。但是在伺服器和桌面應用端,lombok真是個十分火辣迷人的利器。
相關文章
- 【Logo】發現了一塊神奇的石頭Go
- Lombok 原理與實現Lombok
- lombok的使用Lombok
- Rust語言神奇的併發模型Rust模型
- CAEmitterLayer粒子發射器的神奇效果MIT
- 你幹啥的?LombokLombok
- 神奇的 CanvasCanvas
- lombok版本 與 lombok plugins版本問題LombokPlugin
- Lombok生成get/set異常問題(Lombok缺陷)Lombok
- 認識Java專案開發效率工具 LombokJavaLombok
- Lombok @Locked指南Lombok
- sprintboot 配置 lombokbootLombok
- 神奇的npm -- scriptsNPM
- #define 的神奇操作
- 神奇的濾鏡!巧妙實現內凹的平滑圓角
- paluch.biz - Lombok的資料類是有害的!為什麼我不再使用Lombok?Lombok
- Lombok是有害的 · Gregor RieglerLombokGo
- Lombok的常用註解有哪些Lombok
- Lombok使用指南Lombok
- Eclipse lombok javaEclipseLombokJava
- Lombok常用註解Lombok
- LomBok簡化POJOLombokPOJO
- Lombok 之 ConstructorLombokStruct
- LOMBOK使用詳解Lombok
- @Lombok注意事項Lombok
- 這神奇的程式碼
- 神奇的Cookie互通魔法Cookie
- 神奇的copy函式函式
- 神奇的 Object.definePropertyObject
- 神奇的overflow屬性
- 神奇的資料探勘
- 新的神奇的部署策略
- 吃點糖不好嘛 甜甜的LombokLombok
- Lombok 註解詳解Lombok
- Lombok介紹和配置Lombok
- lombok註解介紹Lombok
- Java效率工具之LombokJavaLombok
- SpringBoot使用LomBokSpring BootLombok