I need to compare two objects of the same class excluding some fields.
public final class Class1 { private String a; private String b; private String c; : : : private String z; private Date createdAt; private Date updatedAt; }
How can i find if the two objects of the above class are equal excluding createdAt and updatedAt values? Since there are a lot of fields in this class, i don’t want to compare each of them one by one.
Please don’t give AssertJ’s recursive comparison solution as I don’t need it for UnitTests.
Thank you in Advance!
Advertisement
Answer
The quickest way without writing any code is Lombok
Lombok is one of the most used libraries in java and it takes a lot of Boilerplate code off your projects. If you need to read more on what it can and does, go here.
The way to implement what you need is pretty straightforward:
// Generate the equals and HashCode functions and Include only the fields that I annotate with Include @EqualsAndHashCode(onlyExplicitlyIncluded = true) @Getter // Generate getters for each field @Setter // Generate setters for each field public class Class1 { @EqualsAndHashCode.Include // Include this field private Long identity; private String testStr1; // This field is not annotated with Include so it will not be included in the functions. // ... any other fields }
Lombok can do a lot more than this. For more information on @EqualsAndHashCode
refer to this.
You can always use @EqualsAndHashCode.Exclude
for a quicker solution to your use case:
@EqualsAndHashCode @Getter // Generate getters for each field @Setter // Generate setters for each field public final class Class1 { private String a; private String b; private String c; : : : private String z; @EqualsAndHashCode.Exclude private Date createdAt; @EqualsAndHashCode.Exclude private Date updatedAt; }