2010-04-11 123 views
13

與Eclipse中的代碼模板/代碼生成相比,Project Lombok能提供什麼好處嗎?是否有任何缺點(除了包括.jar)?Project Lombok與Eclipse模板/代碼生成

+1

目前,只有運行時需要的jar如果使用@SneakyThrows。對於所有其他功能,您只需在構建時使用該jar。 – 2010-04-12 08:35:52

+0

看起來非常像SpringRoo,但更簡單。 – 2010-10-26 15:58:01

回答

21

Lombok的一個優點是,一旦你用@Data註釋標註了一個類,當你進行修改時,你永遠不需要重新生成代碼。例如,如果添加一個新字段,@Data將自動在equals,hashCode和toString方法中包含該字段。使用Eclipse生成的方法時,您需要手動進行更改。有些時候,你可能更喜歡手動控制,但在大多數情況下,我預計不會。

4

很少會想到:

  • 它是基於註釋,因此沒有良好的傳統項目仍處於前期Java5中(delombok可以幫助)。實際上,它需要使用javac v1.6編譯器。
  • 它仍然有侷限性regarding multiple constructors

的依賴問題不應被忽視,雖然,但你已經從你的問題排除它。

12

Lombok的優勢在於代碼實際上並不存在 - 即類更具可讀性且不會混亂。

+0

如果代碼不存在,它如何在eclipse中編譯? – javaguy 2011-02-01 18:54:04

+0

@javaguy - 它插入編譯器,據我所知。 – Bozho 2011-02-01 20:52:47

+0

@javaguy在.class文件(由lombok生成)中的代碼是'there',它不在你的.java文件中的文本中,因此刪除了大量的boiler-plate和雜亂。 – Ivin 2014-10-11 15:13:28

6

優點:

  • 非常容易使用
  • 類是更清潔( '沒有樣板代碼'),尤其是「struct'狀內部類收縮到最低限度:

    @Data private class AttrValue { private String attribute; private MyType value; }

    這將同時創建getter和setter,toString()和包含這兩個變量的正確hash()/ equals()方法。 與@Value的變體創建一個不可變的結構(沒有setters,所有字段final)。

  • 無需生成/當你改變字段(getter方法,setter方法,的toString,哈希,等於)
  • 用手工編碼的方法無干擾刪除代碼:在需要的地方,你自己特定的二傳手只需添加到類。龍目島跳過這一點,併產生一切

缺點:

  • 沒有名字的重構,但:以上重命名value會(還)沒有重命名getValue()setValue()
  • 月減慢ecplise略有
  • toString輸出不如從Apache公共ToStringBuilder輸出不錯
0

Eclipse的EMF提供了一些功能,這是非常方便的,其Lombock還不支持:

  • 強大通知mechanims得到了解發生在你的情況下
  • 沒有Java反射通用的API。訪問和修改實例時沒有強烈參考類型
  • 基於命令和API的編輯
  • 模型之間的交叉引用:創建並加載模型樹,EMF通過爲交叉引用創建代理來處理加載。這樣可以節省巨大的域樹
  • 還有更多的內存和提升性能...