zoukankan      html  css  js  c++  java
  • Lombok

    • 引入lombok的jar包
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.14</version>
    </dependency>
    • @EqualsAndHashCode

    生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在parameter参数中命名它们来准确指定希望使用哪些字段。

    import java.util.Arrays;
    public class EqualsAndHashCodeExample {
     private transient int transientVar = 10;
     private String name;
     private double score;
     private Shape shape = new Square(5, 10);
     private String[] tags;
     private transient int id;
     
     public String getName() {
       return this.name;
     }
     
     @Override public boolean equals(Object o) {
       if (o == this) return true;
       if (!(o instanceof EqualsAndHashCodeExample)) return false;
       EqualsAndHashCodeExample other = (EqualsAndHashCodeExample) o;
       if (!other.canEqual((Object)this)) return false;
       if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;
       if (Double.compare(this.score, other.score) != 0) return false;
       if (!Arrays.deepEquals(this.tags, other.tags)) return false;
       return true;
     }
     
     @Override public int hashCode() {
       final int PRIME = 59;
       int result = 1;
       final long temp1 = Double.doubleToLongBits(this.score);
       result = (result*PRIME) + (this.name == null ? 43 : this.name.hashCode());
       result = (result*PRIME) + (int)(temp1 ^ (temp1 >>> 32));
       result = (result*PRIME) + Arrays.deepHashCode(this.tags);
       return result;
     }
     
     protected boolean canEqual(Object other) {
       return other instanceof EqualsAndHashCodeExample;
     }
     
     public static class Square extends Shape {
       private final int width, height;
       
       public Square(int width, int height) {
         this.width = width;
         this.height = height;
       }
       
       @Override public boolean equals(Object o) {
         if (o == this) return true;
         if (!(o instanceof Square)) return false;
         Square other = (Square) o;
         if (!other.canEqual((Object)this)) return false;
         if (!super.equals(o)) return false;
         if (this.width != other.width) return false;
         if (this.height != other.height) return false;
         return true;
       }
       
       @Override public int hashCode() {
         final int PRIME = 59;
         int result = 1;
         result = (result*PRIME) + super.hashCode();
         result = (result*PRIME) + this.width;
         result = (result*PRIME) + this.height;
         return result;
       }
       
       protected boolean canEqual(Object other) {
         return other instanceof Square;
       }
     }
    }
    View Code
    • @Accessors

    @Accessors 主要用于控制生成的getter和setter
    主要参数介绍

    fluent boolean值,默认为false。此字段主要为控制生成的getter和setter方法前面是否带get/set
    chain boolean值,默认false。如果设置为true,setter返回的是此对象,方便链式调用方法
    prefix 设置前缀 例如:@Accessors(prefix = "abc") private String abcAge 当生成get/set方法时,会把此前缀去掉

    • @Data

    @Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

    关于注解@Data报错问题可以参照https://blog.csdn.net/feinifi/article/details/85275280

    在Lombok中,生成构造方法的annotation一共有三个,@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsContructor。使用这三个annotation来完成项目中对于不同构造方法的需求。

    @NoArgsConstructor : 生成一个无参数的构造方法,这个annotation在与其他的annotation配合起来使用的时候更加能凸显出他的重要性,例如在使用hibernate这种框架的时候,如果有一个有参数的构造方法的时候,NoArgsConstructor会展示出他的作用。

    @RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull的变量 的构造方法。生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法。

    @AllArgsContructor: 会生成一个包含所有变量,同时如果变量使用了NotNull annotation , 会进行是否为空的校验

  • 相关阅读:
    牛客小白月赛12 392B
    牛客392A 经典区间覆盖
    hihocoder contest95 1、3、4题目分析 2赛后补题
    hiho一下第234周《矩形计数》题目与解答
    Light oj 1306
    请访问我新的博客
    比特币“投资”记录-1
    如何清爽的使用网页版新浪微博
    Vuex/Vue 练手项目 在线汇率转换器
    重装macOS环境配置笔记
  • 原文地址:https://www.cnblogs.com/lingcheng7777/p/11280446.html
Copyright © 2011-2022 走看看