首頁技術文章正文

Java-Lombok 的使用

更新時間:2018-09-12 來源:黑馬程序員JavaEE培訓學院 瀏覽量:

    

Java-Lombok 的使用

 

前言

Lombok 是一種 Java? 實用工具,可用來幫助開發(fā)人員消除 Java 的冗長,尤其是對于簡單的 Java 對象(POJO)。它通過注解實現這一目的。

正文添加依賴在 pom.xml 文件中添加相關依賴:

<lombok.version>1.16.20</lombok.version

<dependency>

<groupId>org.projectlombok</groupId>            

<artifactId>lombok</artifactId>            

<version>${lombok.version}</version>           

<scope>provided</scope>       

</dependency>

安裝插件由于 Lombok 采取的注解形式的,在編譯后,自動生成相應的方法,為了不讓 ide 瘋了,需要下載插件了支持它。

以 idea 為例:查找插件 lombok plugin 安裝即可。

用我的 User 實體類為例(set,get,toString 方法),

@Getter@Setter@ToStringpublic class SysUserEntity implements Serializable在按快捷鍵 Ctrl + F12,可以查找到set,get,toString 方法。

注解寫點常用的,其余的 api 的打開 Jar 包一目了然

@Getter@Setter@ToString@EqualsAndHashCode構造函數@AllArgsConstructor會生成一個包含所有變量,同時如果變量使用了NotNull annotation , 會進行是否為空的校驗,

全部參數的構造函數的自動生成,該注解的作用域也是只有在實體類上,參數的順序與屬性定義的順序一致。

@NoArgsConstructor無參構造函數

@RequiredArgsConstructor會生成一個包含常量(final),和標識了@NotNull的變量 的構造方法。

怎么使用它們都有三個參數可以設置

1. String staticName() default "";

如果設置了它,將原來的構造方法的訪問修飾符將會變成 私有的,而外添加一個靜態(tài)構造方法,參數相同,名字是設置的字符串的名字,訪問修飾符為公有的。

 

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我自己嘗試了下,我們使用 @Data 注解就可以有下面幾個注解的功能: @ToString、@Getter、@Setter、@EqualsAndHashCode、@NoArgsConstructor 。

注意的是,同時使用@Data 和 @AllArgsConstructor 后 ,默認的無參構造函數失效,如果需要它,要重新設置 @NoArgsConstructor

@Slf4j//類上面注解了,直接調用 log 即可:log.info(xxxx);@Log使用的是 java.util.logging.Logger ,直接使用 變量 log。

@Builderbulder 模式構建對象。

@Cleanup@Cleanup InputStream in = new FileInputStream(args[0]);@Cleanup OutputStream out = new FileOutputStream(args[1]);自動化關閉流,相當于 jdk1.7 種的 try with resource

val類型推導。

val example = new ArrayList<String>(); example.add("Hello, World!");對應的轉換后代碼就是:

val example = new ArrayList<String>(); example.add("Hello, World!");@NonNullpublic NonNullExample(@NonNull Person person) {    this.name = person.getName(); }轉換后就是:

public NonNullExample(@NonNull Person person) {    if (person == null) {      throw new NullPointerException("person");    }    this.name = person.getName(); }@SneakyThrows翻譯就是暗中拋出異常

當我們需要拋出異常,在當前方法上調用,不用顯示的在方法名后面寫 throw

@SneakyThrows(Exception.class)@Synchronized方法中所有的代碼都加入到一個代碼塊中,默認靜態(tài)方法使用的是全局鎖,普通方法使用的是對象鎖,當然也可以指定鎖的對象。

private final Object lock = new Object();@Synchronized("lock")public void foo() {    // Do something} 


作者:黑馬程序員JavaEE培訓學院

首發(fā):http://java.itheima.com/


分享到:
在線咨詢 我要報名
和我們在線交談!