LomBok 的相关目录已经整理出来,希望大家可以根据需求自助学习,好工具要大家分享:
实现equals, hashCode方法是在编程生活中再常见不过的一个东西了,那么自然@EqualsAndHashCode 这个annotation就成为了一个非常方便的工具。默认情况下,被这个annotation标注的class会用到除了 static,transient修饰的所有属性作为判断标准,当然和之前的annotation一样,可是使用exclude选项除掉不想要的属性。也可以通过callSuper包含父类的equals 和 hashCode。 当然如果你的class 没有继承任何其他的class,你却写了callSuper,那么会收获一个编译报错。
你只要这样用:
import lombok.EqualsAndHashCode; @EqualsAndHashCode(exclude={"id", "shape"}) 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 int id; public String getName() { return this.name; } @EqualsAndHashCode(callSuper=true) public static class Square extends Shape { private final int width, height; public Square(int width, int height) { this.width = width; this.height = height; } } }
就可以得到这样的效果:
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 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 ? 0 : 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; } } }
这就是Lombok的优势所在。几个需要注意的点是,对于Array类型的变量,如果需要进行equals和hashCode的时候需要调用工具类的Arrays中的deepHashCode, deepEquals完成比较。
相关推荐
Lombok是一款非常实用的Java库,它通过注解的方式简化了Java代码的编写,特别是减少了getter、setter、构造函数、equals、hashCode以及toString等方法的编写。Lombok的核心理念是减少样板代码,让代码更加简洁易读。...
`@Data` 是Lombok提供的一个复合注解,它包含了`@ToString`、`@EqualsAndHashCode`、`@Getter`和`@Setter`,可以自动为类的所有非静态、非瞬态字段生成getter和setter方法,并且提供默认的toString()和equals()、...
7. **@EqualsAndHashCode**:生成`equals()`和`hashCode()`方法,通常用于实现集合中的唯一性。 8. **@Log4j / @Log / @SLF4J**:为类添加日志记录器,例如`@Log4j`将添加一个名为`log`的日志变量,支持Log4j。 9....
- `@EqualsAndHashCode`: 生成 equals 和 hashCode 方法,确保对象比较和哈希表操作的正确性。 - `@NonNull`: 标记一个字段为非空,可以自动添加空值检查。 2. **使用方法** - 添加 Lombok 依赖:在 Maven 或 ...
Lombok 是一个非常受欢迎的 Java 开发工具,它通过注解的方式简化了 Java 代码,尤其是数据类的编写。在给定的压缩包文件 "lombok-plugin-2021.3.zip" 中,我们找到了适用于 IntelliJ IDEA 2021.3 版本的 Lombok ...
- `@EqualsAndHashCode`:生成equals()和hashCode()方法,可以排除特定字段。 **注意事项** - 安装Lombok后,需要在编译器设置中启用注解处理器,否则IDE可能无法识别Lombok的注解。 - 如果遇到IDE无法识别Lombok...
`@Data`是一个组合注解,包含了`@ToString`、`@EqualsAndHashCode`、`@Getter`(对所有字段)和`@Setter`(对所有非final字段)。这大大提高了代码的可读性和维护性,因为这些常见的样板代码都由Lombok自动生成,不...
7. `@EqualsAndHashCode`:生成equals()和hashCode()方法,通常用于实现集合类的正确比较。可以通过exclude属性排除不想参与比较的字段。 8. `@Log`系列:如`@Log4j`、`@Logback`、`@SLF4J`等,会为类生成日志记录...
- `@ToString` 和 `@EqualsAndHashCode`:自动生成对象的 `toString()` 和 `equals()`、`hashCode()` 方法。 - `@Getter` 和 `@Setter`:分别生成对应字段的 getter 和 setter 方法。 - `@Log`(通常为 `@Log4j`, `@...
Lombok插件是Java开发者常用的工具之一,它极大地提高了开发效率,尤其是在处理大量getter、setter、构造函数和其他常规样板代码时。Lombok通过提供注解的方式,允许开发者在源代码中消除这些冗余的代码,使代码更加...
6. `@EqualsAndHashCode`: 生成重写 `equals()` 和 `hashCode()` 方法,基于类的字段进行比较。 SpringBoot 是一个快速开发框架,它简化了 Spring 应用的创建和配置。结合 Lombok 使用,可以在 SpringBoot 项目中...
* @EqualsAndHashCode:实现 equals() 方法和 hashCode() 方法 * @ToString:实现 toString() 方法 * @Cleanup:关闭流 * @Synchronized:对象同步 * @SneakyThrows:抛出异常 * @Log4j:log4j 日志声明 通过使用 ...
5. `@EqualsAndHashCode`:生成覆盖了Object类的equals()和hashCode()方法,用于比较对象的平等性。默认情况下,它会基于所有非static、非transient字段进行比较,也可以通过注解参数进行调整。 6. `@NonNull`:...
Lombok是一款非常流行的Java开发工具,它通过注解的方式简化了JavaBean的代码编写,极大地提高了开发效率。在本文中,我们将深入探讨Lombok插件及其在IntelliJ IDEA 2019.1版本中的应用。 首先,Lombok插件是针对...
Lombok是一款非常受欢迎的Java库,它通过注解的方式简化了Java对象的创建,使得代码更加简洁、易读。Lombok 2020最新版0.29-2020.1-EAP是其在2020年发布的一个EAP(Early Access Program,早期访问版本),用于测试...
5. `@EqualsAndHashCode`: 自动生成覆盖了`equals()`和`hashCode()`方法,确保对象的比较和哈希计算正确。 使用Lombok可以显著提升代码的可读性和维护性,因为它消除了大量的样板代码。当字段名更改时,通常需要...
如果它是相关的一部分,那么可能是用于演示Lombok如何在数据处理或文档生成场景中发挥作用,或者博主可能在研究Lombok之余,分享了一些关于GRE备考的资源。 总之,Lombok是Java开发中的一款强大工具,它通过注解...
5. `@EqualsAndHashCode`:重写 equals 和 hashCode 方法,通常与 `@Data` 一起使用,确保对象的比较基于其属性。可以排除特定字段或指定仅包含哪些字段。 6. `@NonNull`:标记一个字段为非空,Lombok 会在 getter ...
1. `@Data`:这是Lombok最常用的注解之一,它会自动生成类的所有非静态字段的getter和setter,同时还会生成一个全参数的构造函数。 2. `@AllArgsConstructor`:此注解会为类生成一个包含所有字段的构造函数,而`@...
3. **提高对象比较效率**:`@EqualsAndHashCode`和`@ToString`注解可以自动生成 equals() 和 hashCode() 方法,以及toString()方法,避免了常见的空指针异常问题。 4. **无参构造函数与全参构造函数**:`@...