Lombok
是一種Java™
實用工具,可用來幫助開發人員消除 Java 的冗長,尤爲是對於簡單的 Java 對象(POJO)。它經過註解實現這一目的。css
在 pom.xml 文件中添加相關依賴:java
<lombok.version>1.16.20</lombok.version>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
因爲 Lombok
採起的註解形式的,在編譯後,自動生成相應的方法,爲了避免讓 ide 瘋了,須要下載插件了支持它。
以 idea 爲例:查找插件 lombok plugin
安裝便可。api
用個人 User 實體類爲例(set,get,toString 方法),markdown
@Getter
@Setter
@ToString
public class SysUserEntity implements Serializable
在按快捷鍵 Ctrl + F12
,能夠查找到set,get,toString 方法。ide
寫點經常使用的,其他的 api 的打開 Jar 包一目瞭然函數
會生成一個包含全部變量,同時若是變量使用了NotNull annotation , 會進行是否爲空的校驗,
所有參數的構造函數的自動生成,該註解的做用域也是隻有在實體類上,參數的順序與屬性定義的順序一致。工具
無參構造函數ui
會生成一個包含常量(final),和標識了@NotNull的變量 的構造方法。this
它們都有三個參數能夠設置
1. String staticName() default "";
idea
若是設置了它,將原來的構造方法的訪問修飾符將會變成 私有的,而外添加一個靜態構造方法,參數相同,名字是設置的字符串的名字,訪問修飾符爲公有的。
AnyAnnotation[] onConstructor() default {};
在構造方法上添加註解。使用方法@RequiredArgsConstructor(onConstructor=@__({@AnnotationsGoHere}))}
例如咱們在 Spring 項目中須要注入多個值,寫不少個 @Autowired
很麻煩,就可使用這種方式:
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements IUserService {
private final IUserRepository userRepository;
private final IOrderRepository orderRepository;
………………
AccessLevel access() default lombok.AccessLevel.PUBLIC;
構造函數訪問修飾符;
@NoArgsConstructor
無參構造函數中還有個註解 boolean force() default false;
做者的註釋是 If {@code true}, initializes all final fields to 0 / null / false. Otherwise, a compile time error occurs.
設置爲 true
的時候,初始化全部的參數爲默認值,不然編譯錯誤。
我本身嘗試了下,咱們使用 @Data
註解就能夠有下面幾個註解的功能: @ToString
、@Getter
、@Setter
、@EqualsAndHashCode
、@NoArgsConstructor
。
注意的是,同時使用
@Data
和@AllArgsConstructor
後 ,默認的無參構造函數失效,若是須要它,要從新設置@NoArgsConstructor
//類上面註解了,直接調用 log 便可:
log.info(xxxx);
使用的是 java.util.logging.Logger
,直接使用 變量 log
。
bulder 模式構建對象。
@Cleanup
InputStream in = new FileInputStream(args[0]);
@Cleanup
OutputStream out = new FileOutputStream(args[1]);
自動化關閉流,至關於 jdk1.7 種的 try with resource
類型推導。
val example = new ArrayList<String>();
example.add("Hello, World!");
對應的轉換後代碼就是:
val example = new ArrayList<String>();
example.add("Hello, World!");
public NonNullExample(@NonNull Person person) {
this.name = person.getName();
}
轉換後就是:
public NonNullExample(@NonNull Person person) {
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}
翻譯就是暗中拋出異常
當咱們須要拋出異常,在當前方法上調用,不用顯示的在方法名後面寫 throw
@SneakyThrows(Exception.class)
方法中全部的代碼都加入到一個代碼塊中,默認靜態方法使用的是全局鎖,普通方法使用的是對象鎖,固然也能夠指定鎖的對象。
private final Object lock = new Object();
@Synchronized("lock")
public void foo() {
// Do something
}
我的認爲這樣的閱讀起來比較麻煩,實際開發中每每將 synchronized
顆粒化到代碼塊中。