Lombok?安裝和使用小技巧
簡介
為了減少寫一些 get/set/toString 方法,讓項目代碼更加整潔,提高開發(fā)效率,發(fā)現(xiàn)大家都開始采用 Lombok 這個工具。Lombok 是一個 Java 類庫,它會自動插入編輯器和構(gòu)建工具,用于幫助開發(fā)人員消除 Java 中冗長樣板代碼。而我們開發(fā)人員所要做的,僅僅是添加幾個 Lombok 中的注解,就可以替換掉原來的多行 get/set/toString 方法代碼,既簡潔也易于維護。下面我們就來看看,如何安裝并使用這一工具。
安裝 Lombok
日常開發(fā)中,相信大多數(shù)人現(xiàn)在使用的都是 IDEA 這個 Java 神器了,如果你還在使用 Eclipse 或者 MyEclipse 等工具,那強烈推薦你去體驗一把 IDEA,相信你一用上它就會愛上他它的強大!下面我就一在 IDEA 中使用 Lombok 為例,看看如何安裝并使用它。
在先前 IDEA 的版本中,Lombok 是需要通過插件來安裝的,安裝方法如下:依次進入File -> Settings -> Plugins,然后搜索 Lombok ,最后進行安裝即可。而在新版本的 IDEA 中,Lombok 已經(jīng)被集成到 IDEA 中,我們不用再去安裝它就可以直接使用,可以說是十分方便了。
老版本 IDEA 安裝 Lombok
新版本中集成了 Lombok
以上就是 Lombok 的安裝過程了,是不是十分簡單?那接下來我們就來看看,如何在我們的項目中使用 Lombok!
Lombok 使用
現(xiàn)在大家進行項目管理時用的工具大多應(yīng)該都是 Maven,所以我們直接在需要使用 Lombok 的項目中加入 Lombok 編譯支持,也就是在 pom.xml 文件中加入以下依賴。
<dependency> ? ? <groupId>org.projectlombok</groupId> ? ? <artifactId>lombok</artifactId> </dependency>
導(dǎo)入相關(guān)依賴之后,接下來就是具體使用過程了。
具體使用
在需要的實體類中引入相關(guān)注解即可,只不過注解不同它們所對應(yīng)的功能也不同,而且同一個注解可能在不同位置的功能也不一樣。如下圖;
常用注解
@Data
注解在 類 上:給類的所有屬性提供 get 和 set 方法,此外還有 equals、canEqual、hashCode、toString 方法以及 默認(rèn)參數(shù)為空的構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } ? ? public Long getId() { ? ? ? ? return this.id; ? ? } ? ? public String getName() { ? ? ? ? return this.name; ? ? } ? ? public Integer getAge() { ? ? ? ? return this.age; ? ? } ? ? public String getEmail() { ? ? ? ? return this.email; ? ? } ? ? public void setId(final Long id) { ? ? ? ? this.id = id; ? ? } ? ? public void setName(final String name) { ? ? ? ? this.name = name; ? ? } ? ? public void setAge(final Integer age) { ? ? ? ? this.age = age; ? ? } ? ? public void setEmail(final String email) { ? ? ? ? this.email = email; ? ? } ? ? public boolean equals(final Object o) { ? ? ? ? if (o == this) { ? ? ? ? ? ? return true; ? ? ? ? } else if (!(o instanceof User)) { ? ? ? ? ? ? return false; ? ? ? ? } else { ? ? ? ? ? ? User other = (User)o; ? ? ? ? ? ? if (!other.canEqual(this)) { ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? label59: { ? ? ? ? ? ? ? ? ? ? Object this$id = this.getId(); ? ? ? ? ? ? ? ? ? ? Object other$id = other.getId(); ? ? ? ? ? ? ? ? ? ? if (this$id == null) { ? ? ? ? ? ? ? ? ? ? ? ? if (other$id == null) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? break label59; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } else if (this$id.equals(other$id)) { ? ? ? ? ? ? ? ? ? ? ? ? break label59; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Object this$age = this.getAge(); ? ? ? ? ? ? ? ? Object other$age = other.getAge(); ? ? ? ? ? ? ? ? if (this$age == null) { ? ? ? ? ? ? ? ? ? ? if (other$age != null) { ? ? ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (!this$age.equals(other$age)) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Object this$name = this.getName(); ? ? ? ? ? ? ? ? Object other$name = other.getName(); ? ? ? ? ? ? ? ? if (this$name == null) { ? ? ? ? ? ? ? ? ? ? if (other$name != null) { ? ? ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (!this$name.equals(other$name)) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Object this$email = this.getEmail(); ? ? ? ? ? ? ? ? Object other$email = other.getEmail(); ? ? ? ? ? ? ? ? if (this$email == null) { ? ? ? ? ? ? ? ? ? ? if (other$email != null) { ? ? ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (!this$email.equals(other$email)) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return true; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? protected boolean canEqual(final Object other) { ? ? ? ? return other instanceof User; ? ? } ? ? public int hashCode() { ? ? ? ? int PRIME = true; ? ? ? ? int result = 1; ? ? ? ? Object $id = this.getId(); ? ? ? ? int result = result * 59 + ($id == null ? 43 : $id.hashCode()); ? ? ? ? Object $age = this.getAge(); ? ? ? ? result = result * 59 + ($age == null ? 43 : $age.hashCode()); ? ? ? ? Object $name = this.getName(); ? ? ? ? result = result * 59 + ($name == null ? 43 : $name.hashCode()); ? ? ? ? Object $email = this.getEmail(); ? ? ? ? result = result * 59 + ($email == null ? 43 : $email.hashCode()); ? ? ? ? return result; ? ? } ? ? public String toString() { ? ? ? ? Long var10000 = this.getId(); ? ? ? ? return "User(id=" + var10000 + ", name=" + this.getName() + ", age=" + this.getAge() + ", email=" + this.getEmail() + ")"; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.Data; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @Data public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@Setter
注解在 類 上:為該類所有屬性均提供 set 方法,同時提供 默認(rèn)構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } ? ? public void setId(final Long id) { ? ? ? ? this.id = id; ? ? } ? ? public void setName(final String name) { ? ? ? ? this.name = name; ? ? } ? ? public void setAge(final Integer age) { ? ? ? ? this.age = age; ? ? } ? ? public void setEmail(final String email) { ? ? ? ? this.email = email; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.Setter; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @Setter public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
注解在 屬性 上:為該屬性提供 set 方法,同時提供 默認(rèn)構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } ? ? public void setId(final Long id) { ? ? ? ? this.id = id; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.Setter; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ public class User { ? ? @Setter ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@Getter
注解在 類 上:為該類所有屬性均提供 get 方法,同時提供 默認(rèn)構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } ? ? public Long getId() { ? ? ? ? return this.id; ? ? } ? ? public String getName() { ? ? ? ? return this.name; ? ? } ? ? public Integer getAge() { ? ? ? ? return this.age; ? ? } ? ? public String getEmail() { ? ? ? ? return this.email; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.Getter; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @Getter public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
注解在 屬性 上:為該屬性提供 get 方法,同時提供 默認(rèn)構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } ? ? public Long getId() { ? ? ? ? return this.id; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.Getter; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ public class User { ? ? @Getter ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@ToString
注解在 類 上:生成所有參數(shù)的 toString() 方法,同時提供 默認(rèn)構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } ? ? public String toString() { ? ? ? ? return "User(id=" + this.id + ", name=" + this.name + ", age=" + this.age + ", email=" + this.email + ")"; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.ToString; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @ToString public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@Value
注解在 類 上:生成 get 方法,以及 equals、hashCode、toString 方法,同時提供 含所有參數(shù)的構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public final class User { ? ? private final Long id; ? ? private final String name; ? ? private final Integer age; ? ? private final String email; ? ? public User(final Long id, final String name, final Integer age, final String email) { ? ? ? ? this.id = id; ? ? ? ? this.name = name; ? ? ? ? this.age = age; ? ? ? ? this.email = email; ? ? } ? ? public Long getId() { ? ? ? ? return this.id; ? ? } ? ? public String getName() { ? ? ? ? return this.name; ? ? } ? ? public Integer getAge() { ? ? ? ? return this.age; ? ? } ? ? public String getEmail() { ? ? ? ? return this.email; ? ? } ? ? public boolean equals(final Object o) { ? ? ? ? if (o == this) { ? ? ? ? ? ? return true; ? ? ? ? } else if (!(o instanceof User)) { ? ? ? ? ? ? return false; ? ? ? ? } else { ? ? ? ? ? ? User other; ? ? ? ? ? ? label56: { ? ? ? ? ? ? ? ? other = (User)o; ? ? ? ? ? ? ? ? Object this$id = this.getId(); ? ? ? ? ? ? ? ? Object other$id = other.getId(); ? ? ? ? ? ? ? ? if (this$id == null) { ? ? ? ? ? ? ? ? ? ? if (other$id == null) { ? ? ? ? ? ? ? ? ? ? ? ? break label56; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (this$id.equals(other$id)) { ? ? ? ? ? ? ? ? ? ? break label56; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? } ? ? ? ? ? ? label49: { ? ? ? ? ? ? ? ? Object this$age = this.getAge(); ? ? ? ? ? ? ? ? Object other$age = other.getAge(); ? ? ? ? ? ? ? ? if (this$age == null) { ? ? ? ? ? ? ? ? ? ? if (other$age == null) { ? ? ? ? ? ? ? ? ? ? ? ? break label49; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (this$age.equals(other$age)) { ? ? ? ? ? ? ? ? ? ? break label49; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? } ? ? ? ? ? ? Object this$name = this.getName(); ? ? ? ? ? ? Object other$name = other.getName(); ? ? ? ? ? ? if (this$name == null) { ? ? ? ? ? ? ? ? if (other$name != null) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } else if (!this$name.equals(other$name)) { ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? } ? ? ? ? ? ? Object this$email = this.getEmail(); ? ? ? ? ? ? Object other$email = other.getEmail(); ? ? ? ? ? ? if (this$email == null) { ? ? ? ? ? ? ? ? if (other$email != null) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } else if (!this$email.equals(other$email)) { ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? } ? ? ? ? ? ? return true; ? ? ? ? } ? ? } ? ? public int hashCode() { ? ? ? ? int PRIME = true; ? ? ? ? int result = 1; ? ? ? ? Object $id = this.getId(); ? ? ? ? int result = result * 59 + ($id == null ? 43 : $id.hashCode()); ? ? ? ? Object $age = this.getAge(); ? ? ? ? result = result * 59 + ($age == null ? 43 : $age.hashCode()); ? ? ? ? Object $name = this.getName(); ? ? ? ? result = result * 59 + ($name == null ? 43 : $name.hashCode()); ? ? ? ? Object $email = this.getEmail(); ? ? ? ? result = result * 59 + ($email == null ? 43 : $email.hashCode()); ? ? ? ? return result; ? ? } ? ? public String toString() { ? ? ? ? Long var10000 = this.getId(); ? ? ? ? return "User(id=" + var10000 + ", name=" + this.getName() + ", age=" + this.getAge() + ", email=" + this.getEmail() + ")"; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.Value; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @Value public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@AllArgsConstructor
注解在 類 上:為類提供一個 全參構(gòu)造方法,但此時不再提供默認(rèn)構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User(final Long id, final String name, final Integer age, final String email) { ? ? ? ? this.id = id; ? ? ? ? this.name = name; ? ? ? ? this.age = age; ? ? ? ? this.email = email; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.AllArgsConstructor; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @AllArgsConstructor public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@NoArgsConstructor
注解在 類 上:為類提供一個 無參構(gòu)造方法;
使用前:
package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.NoArgsConstructor; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @NoArgsConstructor public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@RequiredArgsConstructor
注解在 類 上:使用類中所有帶 @NonNull 注解的或帶有 final 修飾的成員變量生成對應(yīng)構(gòu)造方法;
使用前:
package com.cunyu.user.entity; import lombok.NonNull; public class User { ? ? @NonNull ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? @NonNull ? ? private String email; ? ? public User(@NonNull final Long id, @NonNull final String email) { ? ? ? ? if (id == null) { ? ? ? ? ? ? throw new NullPointerException("id is marked non-null but is null"); ? ? ? ? } else if (email == null) { ? ? ? ? ? ? throw new NullPointerException("email is marked non-null but is null"); ? ? ? ? } else { ? ? ? ? ? ? this.id = id; ? ? ? ? ? ? this.email = email; ? ? ? ? } ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.RequiredArgsConstructor; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @RequiredArgsConstructor public class User { ? ? @NonNull ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? @NonNull ? ? private String email; }
@NonNull
注解在 屬性 上,自動生成一個關(guān)于該參數(shù)的非空檢查,若參數(shù)為 null,則拋出一個空指針異常,同時提供 默認(rèn)構(gòu)造方法,具體用法可以參照上面的例子;
@EqualsAndHashCode
注解在 類 上,生成 equals、canEquals、hasnCode 方法,同時會生成默認(rèn)構(gòu)造方法;
使用前:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.cunyu.user.entity; public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; ? ? public User() { ? ? } ? ? public boolean equals(final Object o) { ? ? ? ? if (o == this) { ? ? ? ? ? ? return true; ? ? ? ? } else if (!(o instanceof User)) { ? ? ? ? ? ? return false; ? ? ? ? } else { ? ? ? ? ? ? User other = (User)o; ? ? ? ? ? ? if (!other.canEqual(this)) { ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? label59: { ? ? ? ? ? ? ? ? ? ? Object this$id = this.id; ? ? ? ? ? ? ? ? ? ? Object other$id = other.id; ? ? ? ? ? ? ? ? ? ? if (this$id == null) { ? ? ? ? ? ? ? ? ? ? ? ? if (other$id == null) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? break label59; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } else if (this$id.equals(other$id)) { ? ? ? ? ? ? ? ? ? ? ? ? break label59; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Object this$age = this.age; ? ? ? ? ? ? ? ? Object other$age = other.age; ? ? ? ? ? ? ? ? if (this$age == null) { ? ? ? ? ? ? ? ? ? ? if (other$age != null) { ? ? ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (!this$age.equals(other$age)) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Object this$name = this.name; ? ? ? ? ? ? ? ? Object other$name = other.name; ? ? ? ? ? ? ? ? if (this$name == null) { ? ? ? ? ? ? ? ? ? ? if (other$name != null) { ? ? ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (!this$name.equals(other$name)) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Object this$email = this.email; ? ? ? ? ? ? ? ? Object other$email = other.email; ? ? ? ? ? ? ? ? if (this$email == null) { ? ? ? ? ? ? ? ? ? ? if (other$email != null) { ? ? ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } else if (!this$email.equals(other$email)) { ? ? ? ? ? ? ? ? ? ? return false; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return true; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? protected boolean canEqual(final Object other) { ? ? ? ? return other instanceof User; ? ? } ? ? public int hashCode() { ? ? ? ? int PRIME = true; ? ? ? ? int result = 1; ? ? ? ? Object $id = this.id; ? ? ? ? int result = result * 59 + ($id == null ? 43 : $id.hashCode()); ? ? ? ? Object $age = this.age; ? ? ? ? result = result * 59 + ($age == null ? 43 : $age.hashCode()); ? ? ? ? Object $name = this.name; ? ? ? ? result = result * 59 + ($name == null ? 43 : $name.hashCode()); ? ? ? ? Object $email = this.email; ? ? ? ? result = result * 59 + ($email == null ? 43 : $email.hashCode()); ? ? ? ? return result; ? ? } }
使用后:
package com.cunyu.user.entity; import lombok.EqualsAndHashCode; /** ?* Created with IntelliJ IDEA. ?* ?* @author : zhangliang ?* @version : 1.0 ?* @project : User ?* @package : com.cunyu.user.entity ?* @className : User ?* @createTime : 2021/8/6 17:14 ?* @description : 用戶實體類 ?*/ @EqualsAndHashCode public class User { ? ? private Long id; ? ? private String name; ? ? private Integer age; ? ? private String email; }
@Cleanup
注解在 局部變量 前,保證該變量代表的資源使用后自動關(guān)閉,默認(rèn)調(diào)用資源的 close() 方法,若該資源有其它關(guān)閉方法,可用 @Cleanup("方法名") 來指定要調(diào)用的方法,同時提供 默認(rèn)構(gòu)造方法;
使用前:
import java.io.*; public class CleanupExample { ? ? public static void main(String[] args) throws IOException { ? ? ? ? InputStream in = new FileInputStream(args[0]); ? ? ? ? try { ? ? ? ? ? ? OutputStream out = new FileOutputStream(args[1]); ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? byte[] b = new byte[10000]; ? ? ? ? ? ? ? ? while (true) { ? ? ? ? ? ? ? ? ? ? int r = in.read(b); ? ? ? ? ? ? ? ? ? ? if (r == -1) break; ? ? ? ? ? ? ? ? ? ? out.write(b, 0, r); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } finally { ? ? ? ? ? ? ? ? if (out != null) { ? ? ? ? ? ? ? ? ? ? out.close(); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } finally { ? ? ? ? ? ? if (in != null) { ? ? ? ? ? ? ? ? in.close(); ? ? ? ? ? ? } ? ? ? ? } ? ? } }
使用后:
import lombok.Cleanup; import java.io.*; public class CleanupExample { ? ? public static void main(String[] args) throws IOException { ? ? ? ? @Cleanup InputStream in = new FileInputStream(args[0]); ? ? ? ? @Cleanup OutputStream out = new FileOutputStream(args[1]); ? ? ? ? byte[] b = new byte[10000]; ? ? ? ? while (true) { ? ? ? ? ? ? int r = in.read(b); ? ? ? ? ? ? if (r == -1) break; ? ? ? ? ? ? out.write(b, 0, r); ? ? ? ? } ? ? } }
@Synchronized
注解在 類方法 或 實例方法:效果與 synchronized 關(guān)鍵字相同,區(qū)別在于鎖對象不同,對于類方法和實例方法,synchronized 關(guān)鍵字的鎖對象分別是 類的 class 對象和 this 對象,而 @Synchronized 的鎖對象分別是 私有靜態(tài) final 對象 lock 和 私有 final 對象 lock,也可以自己指定鎖對象,同時提供默認(rèn)構(gòu)造方法;
使用前:
public class SynchronizedExample { ? ? private static final Object $LOCK = new Object[0]; ? ? private final Object $lock = new Object[0]; ? ? private final Object readLock = new Object(); ? ? public static void hello() { ? ? ? ? synchronized($LOCK) { ? ? ? ? ? ? System.out.println("world"); ? ? ? ? } ? ? } ? ? public int answerToLife() { ? ? ? ? synchronized($lock) { ? ? ? ? ? ? return 42; ? ? ? ? } ? ? } ? ? public void foo() { ? ? ? ? synchronized(readLock) { ? ? ? ? ? ? System.out.println("bar"); ? ? ? ? } ? ? } }
使用后:
import lombok.Synchronized; public class SynchronizedExample { ? ? private final Object readLock = new Object(); ? ? @Synchronized ? ? public static void hello() { ? ? ? ? System.out.println("world"); ? ? } ? ? @Synchronized ? ? public int answerToLife() { ? ? ? ? return 42; ? ? } ? ? @Synchronized("readLock") ? ? public void foo() { ? ? ? ? System.out.println("bar"); ? ? } }
@SneakyThrows
注解在 方法 上:將方法中的代碼用 try-catch 語句包裹,捕獲異常并在 catch 中用 Lombok.sneakyThrow(e) 將異常拋出,還可以用 @SneakyThrows(Exception.class) 的形式指定拋出異常類型,同時提供 默認(rèn)構(gòu)造方法;
使用前:
import lombok.Lombok; public class SneakyThrowsExample implements Runnable { ? ? public String utf8ToString(byte[] bytes) { ? ? ? ? try { ? ? ? ? ? ? return new String(bytes, "UTF-8"); ? ? ? ? } catch (UnsupportedEncodingException e) { ? ? ? ? ? ? throw Lombok.sneakyThrow(e); ? ? ? ? } ? ? } ? ? public void run() { ? ? ? ? try { ? ? ? ? ? ? throw new Throwable(); ? ? ? ? } catch (Throwable t) { ? ? ? ? ? ? throw Lombok.sneakyThrow(t); ? ? ? ? } ? ? } }
使用后:
import lombok.SneakyThrows; public class SneakyThrowsExample implements Runnable { ? ? @SneakyThrows(UnsupportedEncodingException.class) ? ? public String utf8ToString(byte[] bytes) { ? ? ? ? return new String(bytes, "UTF-8"); ? ? } ? ? @SneakyThrows ? ? public void run() { ? ? ? ? throw new Throwable(); ? ? } }
@Log
注解在 類 上:主要用于我們記錄日志信息,同時提供 默認(rèn)構(gòu)造方法。它封裝了多個主流 Log 庫,主要有如下幾個;
- @Log
- @Slf4j
- Log4j
- Log4j2
總結(jié):
到此這篇關(guān)于Lombok 安裝和使用小技巧的文章就介紹到這了,更多相關(guān)Lombok 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中基于推、拉模式的sentinel規(guī)則持久化詳解
這篇文章主要介紹了Java中基于推、拉模式的sentinel規(guī)則持久化詳解,推模式是sentinelDashboard?把規(guī)則推給Nacos,Nacos監(jiān)聽規(guī)則的變化推給微服務(wù),拉模式是sentinelDashboard?把規(guī)則直接給微服務(wù),?Nacos定時的同步微服務(wù)端的規(guī)則,需要的朋友可以參考下2023-09-09在Java中將List轉(zhuǎn)換為String輸出過程解析
這篇文章主要介紹了在Java中將List轉(zhuǎn)換為String輸出過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09Windows環(huán)境IDEA下Ranger1.2.0源碼編譯詳細(xì)流程
本文給大家講解Windows環(huán)境IDEA下Ranger1.2.0源碼編譯過程,通過配置Tomcat,發(fā)布?security-admin-web項目,編譯啟動tomcat即可完成,需要的朋友參考下2021-06-06Java使用POI導(dǎo)出Excel(二):多個sheet
這篇文章介紹了Java使用POI導(dǎo)出Excel的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10