Java中優(yōu)雅的使用Lombok

Lombok簡介及入門使用

Lombok 是一種 Java實用工具,可用來幫助開發(fā)人員消除Java的冗長,尤其是對于簡單的Java對象(POJO), 它通過注釋實現(xiàn)這一目的。一個標準的Java bean 一般具有若干屬性,每個屬性具有getter()和setter()方法,Lombok中也用到了注解,但是它并沒有用到反射,而是通過一些奇技淫巧,在代碼編譯時期動態(tài)將注解替換為具體的代碼。所以JVM實際運行的代碼,和我們手動編寫的包含了各種工具方法的類相同。

添加maven依賴

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.16</version>
</dependency>

Lombok注解

  • val: final 像動態(tài)語言一樣,聲明一個fianl的變量。
  • var: 同JDK10
  • @Data:注解在類上,將類提供的所有屬性都添加get、set方法,并添加、equals、canEquals、hashCode、toString方法
  • @Setter:注解在類上,為所有屬性添加set方法、注解在屬性上為該屬性提供set方法
  • @Getter:注解在類上,為所有的屬性添加get方法、注解在屬性上為該屬性提供get方法
  • @NotNull:在參數(shù)中使用時,如果調(diào)用時傳了null值,就會拋出空指針異常
  • @Synchronized 用于方法,可以鎖定指定的對象,如果不指定,則默認創(chuàng)建一個對象鎖定
  • @Log作用于類,創(chuàng)建一個log屬性
  • @Builder:使用builder模式創(chuàng)建對象
  • @NoArgsConstructor:創(chuàng)建一個無參構造函數(shù)
  • @AllArgsConstructor:創(chuàng)建一個全參構造函數(shù)
  • @ToString:創(chuàng)建一個toString方法
  • @Accessors(chain = true)使用鏈式設置屬性,set方法返回的是this對象。
  • @RequiredArgsConstructor:創(chuàng)建對象, 例: 在class上添加@RequiredArgsConstructor(staticName = "of")會創(chuàng)建生成一個靜態(tài)方法
  • @UtilityClass:工具類
  • @ExtensionMethod:設置父類
  • @FieldDefaults:設置屬性的使用范圍,如private、public等,也可以設置屬性是否被final修飾。
  • @Cleanup: 關閉流、連接點。
  • @EqualsAndHashCode:重寫equals和hashcode方法。
  • @toString:創(chuàng)建toString方法。
  • @Cleanup: 用于流等可以不需要關閉使用流對象.

一些使用的例子

普通的bean:

    public class User {
        private String id;
        private String name;
        private Integer age;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }

使用 lombok

使用lombok,代碼可以變得非常的簡潔,看著也舒服。

@Setter
@Getter
public class User {
    private String id;
    private String name;
    private Integer age;
}

public static void main(String[] args) {
    User user = new User();
    user.setId("1");
    user.setName("name");
    user.setAge(1);
}

@Accessors(chain = true):使用鏈式創(chuàng)建:

@Setter
@Getter
@Accessors(chain = true)
public class User {
    private String id;
    private String name;
    private Integer age;
}

public static void main(String[] args) {
    //使用@Accessors(chain = true)
    User userChain = new User();
    userChain.setId("1").setName("chain").setAge(1);
}

@Builder:使用builder模式創(chuàng)建對象

@Setter
@Getter
@Builder
public class User {
    private String id;
    private String name;
    private Integer age;
}

public static void main(String[] args) {
    User user = User.builder().id("1").name("builder").age(1).build();
    System.out.println(user.getId());
}

@UtilityClass:工具類注解

@UtilityClass
public class Utility {

    public String getName() {
        return "name";
    }
}

public static void main(String[] args) {
    // Utility utility = new Utility(); 構造函數(shù)為私有的,
    System.out.println(Utility.getName());

}

@CleanUp: 清理流對象

@Cleanup
OutputStream outStream = new FileOutputStream(new File("text.txt"));
@Cleanup
InputStream inStream = new FileInputStream(new File("text2.txt"));
byte[] b = new byte[65536];
while (true) {
   int r = inStream.read(b);
   if (r == -1) break;
   outStream.write(b, 0, r); 
}

參考鏈接:

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

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