Lombok簡介及入門使用
Lombok 是一種 Java實用工具,可用來幫助開發人員消除Java的冗長,尤其是對于簡單的Java對象(POJO), 它通過注釋實現這一目的。一個標準的Java bean 一般具有若干屬性,每個屬性具有getter()和setter()方法,Lombok中也用到了注解,但是它并沒有用到反射,而是通過一些奇技淫巧,在代碼編譯時期動態將注解替換為具體的代碼。所以JVM實際運行的代碼,和我們手動編寫的包含了各種工具方法的類相同。
添加maven依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
Lombok注解
- val: final 像動態語言一樣,聲明一個fianl的變量。
- var: 同JDK10
- @Data:注解在類上,將類提供的所有屬性都添加get、set方法,并添加、equals、canEquals、hashCode、toString方法
- @Setter:注解在類上,為所有屬性添加set方法、注解在屬性上為該屬性提供set方法
- @Getter:注解在類上,為所有的屬性添加get方法、注解在屬性上為該屬性提供get方法
- @NotNull:在參數中使用時,如果調用時傳了null值,就會拋出空指針異常
- @Synchronized 用于方法,可以鎖定指定的對象,如果不指定,則默認創建一個對象鎖定
- @Log作用于類,創建一個log屬性
- @Builder:使用builder模式創建對象
- @NoArgsConstructor:創建一個無參構造函數
- @AllArgsConstructor:創建一個全參構造函數
- @ToString:創建一個toString方法
- @Accessors(chain = true)使用鏈式設置屬性,set方法返回的是this對象。
- @RequiredArgsConstructor:創建對象, 例: 在class上添加@RequiredArgsConstructor(staticName = "of")會創建生成一個靜態方法
- @UtilityClass:工具類
- @ExtensionMethod:設置父類
- @FieldDefaults:設置屬性的使用范圍,如private、public等,也可以設置屬性是否被final修飾。
- @Cleanup: 關閉流、連接點。
- @EqualsAndHashCode:重寫equals和hashcode方法。
- @toString:創建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):使用鏈式創建:
@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模式創建對象
@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(); 構造函數為私有的,
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);
}
參考鏈接: