Lombok: 让你写 Java代码像C#一样爽

2017-09-10  本文已影响74人  Bobby0322

作用:帮使用者提高编码效率,减少重复与冗余的代码
原理:ASM 动态修改class文件

我曾经是一名 .Net 开发,如今的我是一名 Java 开发者。在我享受着 Java 成熟的生态时,我常常怀念 c# 简洁的语法:自动属性、类型推断、自动初始化器 ....
鱼,我所欲也,熊掌亦我所欲也; 二者不可得兼;
直到我遇到了 lombok 。

添加依赖及 IDE 插件

<!--引入Lombok相关依赖,用于避免数据Get Set方法的重复创建-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.18</version>
    <scope>provided</scope>
</dependency>

因为 lombok 要在编译器编译时通过操作AST(抽象语法树)改变字节码生成,因此为了让 IDE 能够支持 lombok 需要给 IDE 添加相关插件,下面是 Idea 添加插件的方法:

Lombok Plugin

一个典型的Java类

package com.pingkeke.springBoot.entity;

import com.pingkeke.springBoot.enums.UserSexEnum;

/**
 * UserEntity.
 */
public class UserEntity {

    private static final long serialVersionUID = 1L;
    private Long id;
    private String userName;
    private String passWord;
    private UserSexEnum userSex;
    private String nickName;

    public UserEntity() {
        super();
    }

    public UserEntity(String userName, String passWord, UserSexEnum userSex) {
        super();
        this.passWord = passWord;
        this.userName = userName;
        this.userSex = userSex;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public UserSexEnum getUserSex() {
        return userSex;
    }

    public void setUserSex(UserSexEnum userSex) {
        this.userSex = userSex;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "userName " + this.userName
                + ", pasword " + this.passWord
                + "sex " + userSex.name();
    }
}
package com.pingkeke.springBoot.enums;

/**
 * UserSexEnum.
 */
public enum UserSexEnum {
    MAN, WOMAN
}

对于这样一个简单的 Java 类,我们通常需要给每个属性写 getXXX() 和 setXXX() 方法,有时候还要重写 equals()、 hashCode()、
toString()等方法。在开发的过程中,重复编写这些“没有技术含量”的代码,对程序员来说是一个很枯燥无趣的事情,也增加了很大的工作负担。
针对这种情况,Lombok 提供了一种机制,基于注解的方式,帮助我们自动生成这些样板代码。

Lombok注解

package com.pingkeke.springBoot.entity;

import com.pingkeke.springBoot.enums.UserSexEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * UserEntity.
 * @Data
 @ToString、 @EqualsAndHashCode、 @Getter、 @Setter 和 @RequiredArgsConstructor 注解的集合。

 @NoArgsConstructor
 作用于类,@NoArgsConstructor 自动生成不带参数的构造方法;

 @AllArgsConstructor
 @AllArgsConstructor 自动生成包含所有属性的构造方法。

 @Accessors有三个参数可以使用
 chain 链式的形式
 fluent 流式的形式
 prefix 生成指定前缀的属性的getter与setter方法,并且生成的getter与setter方法时会去除前缀
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class UserEntity {

    private Long id;
    private String userName;
    private String passWord;
    private UserSexEnum userSex;
    private String nickName;

}

上一篇 下一篇

猜你喜欢

热点阅读