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

作用:帮使用者提高编码效率,减少重复与冗余的代码
原理: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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,786评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,976评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 喜欢就会放肆,但爱就是克制。——韩寒 从小到大,发现很多同学爱用荧光笔,尤其是女生,花花绿绿好几种颜色,所以笔袋总...
    珂粒阅读 1,103评论 0 4
  • 1. redis-cli -r(repeat)选项代表江命令执行多次 -i(interval)选项代表每个几秒执行...
    yuanzicheng阅读 1,594评论 0 49