Class EqualsMethod
java.lang.Object
net.bytebuddy.implementation.EqualsMethod
- All Implemented Interfaces:
InstrumentedType.Prepareable, Implementation
An implementation of
Object.equals(Object) that takes a class's declared fields into consideration. Equality is resolved by comparing two
instances of the same or a compatible class field by field where reference fields must either both be null or where the field value of
the instance upon which the method is invoked returns true upon calling the value's equals method. For arrays, the corresponding
utilities of Arrays are used.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classA byte code appender to implement theEqualsMethod.protected static classA compound comparator that compares the values of multiple fields.protected static classA conditional return aborts the equality computation if a given condition was reached.protected static enumA comparator that retains the natural order.protected static interfaceGuards a field value against a potentialnullvalue.protected static enumChecks the equality contract against the super class.protected static enumChecks the overall type of the provided argument.protected static enumA comparator that sorts fields by a type property.protected static enumA value comparator is responsible to compare to values of a given type.Nested classes/interfaces inherited from interface Implementation
Implementation.Composable, Implementation.Compound, Implementation.Context, Implementation.Simple, Implementation.SpecialMethodInvocation, Implementation.TargetNested classes/interfaces inherited from interface InstrumentedType.Prepareable
InstrumentedType.Prepareable.NoOp -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Comparator<? super FieldDescription.InDefinedShape> The comparator to apply for ordering fields.private static final MethodDescription.InDefinedShapeTheObject.equals(Object)method.private final ElementMatcher.Junction<? super FieldDescription.InDefinedShape> A matcher to determine that a field should be considered by its identity.private final ElementMatcher.Junction<? super FieldDescription.InDefinedShape> A matcher to filter fields that should not be used for a equality resolution.private final ElementMatcher.Junction<? super FieldDescription.InDefinedShape> A matcher to determine fields of a reference type that cannot benull.private final EqualsMethod.SuperClassCheckThe baseline equality to check.private final EqualsMethod.TypeCompatibilityCheckThe instance type compatibility check. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedEqualsMethod(EqualsMethod.SuperClassCheck superClassCheck) Creates a new equals method implementation.privateEqualsMethod(EqualsMethod.SuperClassCheck superClassCheck, EqualsMethod.TypeCompatibilityCheck typeCompatibilityCheck, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> ignored, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> nonNullable, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> identity, Comparator<? super FieldDescription.InDefinedShape> comparator) Creates a new equals method implementation. -
Method Summary
Modifier and TypeMethodDescriptionappender(Implementation.Target implementationTarget) Creates a byte code appender that determines the implementation of the instrumented type's methods.static EqualsMethodisolated()Creates an equals method implementation that does not invoke the super class'sObject.equals(Object)method.prepare(InstrumentedType instrumentedType) Prepares a given instrumented type.static EqualsMethodCreates an equals implementation that invokes the super class'sObject.equals(Object)method first.Returns a new version of this equals method that compares fields with enumeration types prior to fields with non-enumeration types.withFieldOrder(Comparator<? super FieldDescription.InDefinedShape> comparator) Applies the supplied comparator to determine an order for fields for being compared.withIdentityFields(ElementMatcher<? super FieldDescription.InDefinedShape> identity) Returns a new version of this equals method implementation that considers the matched fields by their identity.withIgnoredFields(ElementMatcher<? super FieldDescription.InDefinedShape> ignored) Returns a new version of this equals method implementation that ignores the specified fields additionally to any previously specified fields.withNonNullableFields(ElementMatcher<? super FieldDescription.InDefinedShape> nonNullable) Returns a new version of this equals method implementation that does not apply anullvalue check for the specified fields if they have a reference type additionally to any previously specified fields.Returns a new version of this equals method that compares fields with primitive types prior to fields with non-primitive types.Returns a new version of this equals method that compares fields with primitive wrapper types prior to fields with non-primitive wrapper types.Returns a new version of this equals method implementation that permits subclasses of the instrumented type to be equal to instances of the instrumented type instead of requiring an exact match.
-
Field Details
-
EQUALS
TheObject.equals(Object)method. -
superClassCheck
The baseline equality to check. -
typeCompatibilityCheck
The instance type compatibility check. -
ignored
A matcher to filter fields that should not be used for a equality resolution. -
nonNullable
A matcher to determine fields of a reference type that cannot benull. -
identity
A matcher to determine that a field should be considered by its identity. -
comparator
The comparator to apply for ordering fields.
-
-
Constructor Details
-
EqualsMethod
Creates a new equals method implementation.- Parameters:
superClassCheck- The baseline equality to check.
-
EqualsMethod
private EqualsMethod(EqualsMethod.SuperClassCheck superClassCheck, EqualsMethod.TypeCompatibilityCheck typeCompatibilityCheck, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> ignored, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> nonNullable, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> identity, Comparator<? super FieldDescription.InDefinedShape> comparator) Creates a new equals method implementation.- Parameters:
superClassCheck- The baseline equality to check.typeCompatibilityCheck- The instance type compatibility check.ignored- A matcher to filter fields that should not be used for a equality resolution.nonNullable- A matcher to determine fields of a reference type that cannot benull.identity- A matcher to determine that a field should be considered by its identity.comparator- The comparator to apply for ordering fields.
-
-
Method Details
-
requiringSuperClassEquality
Creates an equals implementation that invokes the super class'sObject.equals(Object)method first.- Returns:
- An equals implementation that invokes the super class's
Object.equals(Object)method first.
-
isolated
Creates an equals method implementation that does not invoke the super class'sObject.equals(Object)method.- Returns:
- An equals method implementation that does not invoke the super class's
Object.equals(Object)method.
-
withIgnoredFields
public EqualsMethod withIgnoredFields(ElementMatcher<? super FieldDescription.InDefinedShape> ignored) Returns a new version of this equals method implementation that ignores the specified fields additionally to any previously specified fields.- Parameters:
ignored- A matcher to specify any fields that should be ignored.- Returns:
- A new version of this equals method implementation that also ignores any fields matched by the provided matcher.
-
withNonNullableFields
public EqualsMethod withNonNullableFields(ElementMatcher<? super FieldDescription.InDefinedShape> nonNullable) Returns a new version of this equals method implementation that does not apply anullvalue check for the specified fields if they have a reference type additionally to any previously specified fields.- Parameters:
nonNullable- A matcher to specify any fields that should not be guarded againstnullvalues.- Returns:
- A new version of this equals method implementation that also does not apply
nullvalue checks to any fields matched by the provided matcher.
-
withIdentityFields
public EqualsMethod withIdentityFields(ElementMatcher<? super FieldDescription.InDefinedShape> identity) Returns a new version of this equals method implementation that considers the matched fields by their identity.- Parameters:
identity- A matcher to determine that a field should be considered by its identity.- Returns:
- A new version of this equals method implementation that also considers the matched fields by their identity.
-
withPrimitiveTypedFieldsFirst
Returns a new version of this equals method that compares fields with primitive types prior to fields with non-primitive types.- Returns:
- A new version of this equals method that compares primitive-typed fields before fields with non-primitive-typed fields.
-
withEnumerationTypedFieldsFirst
Returns a new version of this equals method that compares fields with enumeration types prior to fields with non-enumeration types.- Returns:
- A new version of this equals method that compares enumeration-typed fields before fields with non-enumeration-typed fields.
-
withPrimitiveWrapperTypedFieldsFirst
Returns a new version of this equals method that compares fields with primitive wrapper types prior to fields with non-primitive wrapper types.- Returns:
- A new version of this equals method that compares primitive wrapper-typed fields before fields with non-primitive wrapper-typed fields.
-
withStringTypedFieldsFirst
-
withFieldOrder
Applies the supplied comparator to determine an order for fields for being compared. Fields with the lowest sort order are compared first. Any previously defined comparators are applied prior to the supplied comparator.- Parameters:
comparator- The comparator to apply.- Returns:
- A new version of this equals method that sorts fields in their application order using the supplied comparator.
-
withSubclassEquality
Returns a new version of this equals method implementation that permits subclasses of the instrumented type to be equal to instances of the instrumented type instead of requiring an exact match.- Returns:
- A new version of this equals method implementation that permits subclasses of the instrumented type to be equal to instances of the instrumented type instead of requiring an exact match.
-
prepare
Prepares a given instrumented type.- Specified by:
preparein interfaceInstrumentedType.Prepareable- Parameters:
instrumentedType- The instrumented type in its current form.- Returns:
- The prepared instrumented type.
-
appender
Creates a byte code appender that determines the implementation of the instrumented type's methods.- Specified by:
appenderin interfaceImplementation- Parameters:
implementationTarget- The target of the current implementation.- Returns:
- A byte code appender for implementing methods delegated to this implementation. This byte code appender
is also responsible for handling methods that were added by this implementation on the call to
InstrumentedType.Prepareable.prepare(InstrumentedType).
-