使用lombok优化model编写


返回目录

对于Java程序员来说,domain对象或者说Java类中的setter/getter绝对是令人厌弃的东西,而且这些格式化的代码还需要随着属性的修改不断维护。而lombok就是可以协助帮我们去掉这些东西的神器。

1. lombok介绍

官网:https://projectlombok.org/

优势劣势
1. 去掉setter/getter方法;
2. 去掉toString,hashcode等方法;
3. 可以自动生成有参、无参构造器等;
1. 需要IDE安装插件进行支持;
2. maven/gradle等不同的工具依赖方式存在差别;

2. lombok简单使用

2.1 Intellij IDEA插件安装

在这里插入图片描述

2.2 工程依赖

maven依赖

 <dependency>
 	<groupId>org.projectlombok</groupId>
 	<artifactId>lombok</artifactId>
 	<version>1.18.12</version>
 	<scope>provided</scope>
 </dependency>

gradle依赖

dependencies {
 compileOnly 'org.projectlombok:lombok:1.18.12'
 annotationProcessor 'org.projectlombok:lombok:1.18.12'
 
 testCompileOnly 'org.projectlombok:lombok:1.18.12'
 testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
}

2.3 使用

源代码:

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
public class Student {
   private String eid;
   private String name;
   private int age;
   private String clzNo;
}
反编译代码:
public class Student {
   private String eid;
   private String name;
   private int age;
   private String clzNo;
   public String getEid() {
       return this.eid;
    }
   public String getName() {
       return this.name;
    }
   public int getAge() {
       return this.age;
    }
   public String getClzNo() {
       return this.clzNo;
    }
   public void setEid(String eid) {
       this.eid = eid;
    }
   public void setName(String name) {
       this.name = name;
    }
   public void setAge(int age) {
       this.age = age;
    }
   public void setClzNo(String clzNo) {
       this.clzNo = clzNo;
    }
   public String toString() {
       return "Student(eid=" + this.getEid() + ", name=" + this.getName() + ", age=" + this.getAge() + ", clzNo=" + this.getClzNo() + ")";
    }
   public boolean equals(Object o) {
       if (o == this) {
           return true;
        } else if (!(o instanceof Student)) {
           return false;
        } else {
            Student other = (Student)o;
           if (!other.canEqual(this)) {
               return false;
            } else {
                Object this$eid = this.getEid();
                Object other$eid = other.getEid();
               if (this$eid == null) {
                   if (other$eid != null) {
                       return false;
                    }
                } else if (!this$eid.equals(other$eid)) {
                   return false;
                }
                Object this$name = this.getName();
                Object other$name = other.getName();
               if (this$name == null) {
                   if (other$name != null) {
                       return false;
                    }
                } else if (!this$name.equals(other$name)) {
                   return false;
                }
               if (this.getAge() != other.getAge()) {
                   return false;
                } else {
                    Object this$clzNo = this.getClzNo();
                    Object other$clzNo = other.getClzNo();
                   if (this$clzNo == null) {
                       if (other$clzNo != null) {
                           return false;
                        }
                    } else if (!this$clzNo.equals(other$clzNo)) {
                       return false;
                    }
                   return true;
                }
            }
        }
    }
   protected boolean canEqual(Object other) {
       return other instanceof Student;
    }
   public int hashCode() {
       int PRIME = true;
       int result = 1;
        Object $eid = this.getEid();
       int result = result * 59 + ($eid == null ? 43 : $eid.hashCode());
        Object $name = this.getName();
        result = result * 59 + ($name == null ? 43 : $name.hashCode());
        result = result * 59 + this.getAge();
        Object $clzNo = this.getClzNo();
        result = result * 59 + ($clzNo == null ? 43 : $clzNo.hashCode());
       return result;
    }
   public Student() {
    }
}

说明:
可以看到lombok已帮你自动生成setter/getter/hashCode/toString/equals/constructor方法,基本上以满足使用。

常用注解说明
@data相当于添加如下注解:@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
@EqualsAndHashCode生成equuals和hashcode方法
@NoArgsConstructor自动生成无参构造器
@AllArgsConstructor生成全部参数的注解,不建议使用,参数顺序无法指定
@Slf4j相当于添加:
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(T.class);
@Setter生成属性的setter方法
@Getter生成getter方法

部分参数在此抛砖引玉,其它参数详细说明可以参考官网:https://projectlombok.org/features/all

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值