diff --git a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java index b34e9d39056..f4ec11332c6 100644 --- a/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java +++ b/src/main/java/org/apache/commons/lang3/builder/EqualsBuilder.java @@ -198,7 +198,7 @@ private static void unregister(final Object lhs, final Object rhs) { * If the fields tested are equals. * The default value is {@code true}. */ - private boolean isEquals = true; + boolean isEquals = true; private boolean testTransients; private boolean testRecursive; @@ -450,6 +450,15 @@ public static boolean reflectionEquals(final Object lhs, final Object rhs, final .isEquals(); } + /** + * Indicates if an early append method leave should be done + * + * @return true if the equality is false + */ + boolean shouldLeaveEarly() { + return !isEquals; + } + /** * Tests if two {@code objects} by using reflection. * @@ -478,7 +487,7 @@ public static boolean reflectionEquals(final Object lhs, final Object rhs, final * @return this */ public EqualsBuilder reflectionAppend(final Object lhs, final Object rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -583,7 +592,7 @@ private void reflectionAppend( * @since 2.0 */ public EqualsBuilder appendSuper(final boolean superEquals) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } isEquals = superEquals; @@ -602,7 +611,7 @@ public EqualsBuilder appendSuper(final boolean superEquals) { * @return this */ public EqualsBuilder append(final Object lhs, final Object rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -670,7 +679,7 @@ private void appendArray(final Object lhs, final Object rhs) { * @return this */ public EqualsBuilder append(final long lhs, final long rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } isEquals = lhs == rhs; @@ -685,7 +694,7 @@ public EqualsBuilder append(final long lhs, final long rhs) { * @return this */ public EqualsBuilder append(final int lhs, final int rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } isEquals = lhs == rhs; @@ -700,7 +709,7 @@ public EqualsBuilder append(final int lhs, final int rhs) { * @return this */ public EqualsBuilder append(final short lhs, final short rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } isEquals = lhs == rhs; @@ -715,7 +724,7 @@ public EqualsBuilder append(final short lhs, final short rhs) { * @return this */ public EqualsBuilder append(final char lhs, final char rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } isEquals = lhs == rhs; @@ -730,7 +739,7 @@ public EqualsBuilder append(final char lhs, final char rhs) { * @return this */ public EqualsBuilder append(final byte lhs, final byte rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } isEquals = lhs == rhs; @@ -751,7 +760,7 @@ public EqualsBuilder append(final byte lhs, final byte rhs) { * @return this */ public EqualsBuilder append(final double lhs, final double rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } return append(Double.doubleToLongBits(lhs), Double.doubleToLongBits(rhs)); @@ -771,7 +780,7 @@ public EqualsBuilder append(final double lhs, final double rhs) { * @return this */ public EqualsBuilder append(final float lhs, final float rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } return append(Float.floatToIntBits(lhs), Float.floatToIntBits(rhs)); @@ -785,7 +794,7 @@ public EqualsBuilder append(final float lhs, final float rhs) { * @return this */ public EqualsBuilder append(final boolean lhs, final boolean rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } isEquals = lhs == rhs; @@ -806,7 +815,7 @@ public EqualsBuilder append(final boolean lhs, final boolean rhs) { * @return this */ public EqualsBuilder append(final Object[] lhs, final Object[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -837,7 +846,7 @@ public EqualsBuilder append(final Object[] lhs, final Object[] rhs) { * @return this */ public EqualsBuilder append(final long[] lhs, final long[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -868,7 +877,7 @@ public EqualsBuilder append(final long[] lhs, final long[] rhs) { * @return this */ public EqualsBuilder append(final int[] lhs, final int[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -899,7 +908,7 @@ public EqualsBuilder append(final int[] lhs, final int[] rhs) { * @return this */ public EqualsBuilder append(final short[] lhs, final short[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -930,7 +939,7 @@ public EqualsBuilder append(final short[] lhs, final short[] rhs) { * @return this */ public EqualsBuilder append(final char[] lhs, final char[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -961,7 +970,7 @@ public EqualsBuilder append(final char[] lhs, final char[] rhs) { * @return this */ public EqualsBuilder append(final byte[] lhs, final byte[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -992,7 +1001,7 @@ public EqualsBuilder append(final byte[] lhs, final byte[] rhs) { * @return this */ public EqualsBuilder append(final double[] lhs, final double[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -1023,7 +1032,7 @@ public EqualsBuilder append(final double[] lhs, final double[] rhs) { * @return this */ public EqualsBuilder append(final float[] lhs, final float[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { @@ -1054,7 +1063,7 @@ public EqualsBuilder append(final float[] lhs, final float[] rhs) { * @return this */ public EqualsBuilder append(final boolean[] lhs, final boolean[] rhs) { - if (!isEquals) { + if (shouldLeaveEarly()) { return this; } if (lhs == rhs) { diff --git a/src/main/java/org/apache/commons/lang3/builder/TypedEqualsBuilder.java b/src/main/java/org/apache/commons/lang3/builder/TypedEqualsBuilder.java new file mode 100644 index 00000000000..f854abd32bd --- /dev/null +++ b/src/main/java/org/apache/commons/lang3/builder/TypedEqualsBuilder.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.lang3.builder; + +import java.util.Objects; +import java.util.function.Function; + +/** + * An extension of {@link EqualsBuilder} aimed to perform additionally the base objects and class equals checks. + * + *
It then offers the possibility to append field extractors.
+ * + *Typical use for the code is as follows:
+ *+ * public boolean equals(Object obj) { + * return new TypedEqualsBuilder<>(this) + * .appendBaseObject(obj) + * .append(TestObject::getA) + * .append(TestObject::getB) + * .isEquals(); + * } + *+ * + * @param