FUNCTOR-11 Reduce API clutter by removing extra equals methods

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/functor/trunk@1536009 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryPredicate.java
index 7559b99..6028a4b 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryPredicate.java
@@ -69,19 +69,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(final Object that) {
-        return that == this
-                || (that instanceof BinaryFunctionBinaryPredicate<?, ?>
-                && equals((BinaryFunctionBinaryPredicate<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinaryFunctionBinaryPredicate is equal to this.
-     * @param that BinaryFunctionBinaryPredicate to test
-     * @return boolean
-     */
-    public boolean equals(final BinaryFunctionBinaryPredicate<?, ?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryFunctionBinaryPredicate<?, ?>)) {
+            return false;
+        }
+        BinaryFunctionBinaryPredicate<?, ?> that = (BinaryFunctionBinaryPredicate<?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryProcedure.java
index 648ba6f..01e885e 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionBinaryProcedure.java
@@ -70,19 +70,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this
-                || (that instanceof BinaryFunctionBinaryProcedure<?, ?>
-                && equals((BinaryFunctionBinaryProcedure<?, ?>) that));
-    }
-
-    /**
-     * Learn whether a given BinaryFunctionBinaryPredicate is equal to this.
-     * @param that BinaryFunctionBinaryPredicate to compare
-     * @return boolean
-     */
-    public boolean equals(BinaryFunctionBinaryProcedure<?, ?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryFunctionBinaryProcedure<?, ?>)) {
+            return false;
+        }
+        BinaryFunctionBinaryProcedure<?, ?> that = (BinaryFunctionBinaryProcedure<?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionFunction.java
index aea8d2c..ca34ae6 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BinaryFunctionFunction.java
@@ -53,17 +53,14 @@
      */
     @Override
     public boolean equals(Object obj) {
-        return obj == this || obj instanceof BinaryFunctionFunction<?, ?>
-                && equals((BinaryFunctionFunction<?, ?>) obj);
-    }
-
-    /**
-     * Learn whether another BinaryFunctionFunction is equal to <code>this</code>.
-     * @param that BinaryFunctionFunction to check
-     * @return whether equal
-     */
-    public boolean equals(BinaryFunctionFunction<?, ?> that) {
-        return that != null && that.function.equals(this.function);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryFunctionFunction<?, ?>)) {
+            return false;
+        }
+        BinaryFunctionFunction<?, ?> that = (BinaryFunctionFunction<?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicateBinaryFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicateBinaryFunction.java
index f8b7864..acf9bce 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicateBinaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicateBinaryFunction.java
@@ -70,19 +70,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this
-                || (that instanceof BinaryPredicateBinaryFunction<?, ?>
-                && equals((BinaryPredicateBinaryFunction<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinaryPredicateBinaryFunction is equal to this.
-     * @param that BinaryPredicateBinaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(BinaryPredicateBinaryFunction<?, ?> that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryPredicateBinaryFunction<?, ?>)) {
+            return false;
+        }
+        BinaryPredicateBinaryFunction<?, ?> that = (BinaryPredicateBinaryFunction<?, ?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicatePredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicatePredicate.java
index 64691f9..f2111f0 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicatePredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BinaryPredicatePredicate.java
@@ -51,20 +51,14 @@
      */
     @Override
     public boolean equals(Object obj) {
-        return obj == this || obj instanceof BinaryPredicatePredicate<?>
-                && equals((BinaryPredicatePredicate<?>) obj);
-    }
-
-    /**
-     * Learn whether another BinaryPredicatePredicate is equal to
-     * <code>this</code>.
-     *
-     * @param that BinaryPredicatePredicate to check
-     *
-     * @return whether equal
-     */
-    public boolean equals(BinaryPredicatePredicate<?> that) {
-        return that != null && that.predicate.equals(this.predicate);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryPredicatePredicate<?>)) {
+            return false;
+        }
+        BinaryPredicatePredicate<?> that = (BinaryPredicatePredicate<?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureBinaryFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureBinaryFunction.java
index 76e0b54..6a9cfde 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureBinaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureBinaryFunction.java
@@ -69,18 +69,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof BinaryProcedureBinaryFunction<?, ?, ?>
-                                    && equals((BinaryProcedureBinaryFunction<?, ?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinaryProcedureBinaryFunction is equal to this.
-     * @param that the BinaryProcedureBinaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(BinaryProcedureBinaryFunction<?, ?, ?> that) {
-        return null != that && procedure.equals(that.procedure);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryProcedureBinaryFunction<?, ?, ?>)) {
+            return false;
+        }
+        BinaryProcedureBinaryFunction<?, ?, ?> that = (BinaryProcedureBinaryFunction<?, ?, ?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureProcedure.java
index 726ce15..91d67b2 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BinaryProcedureProcedure.java
@@ -51,20 +51,14 @@
      */
     @Override
     public boolean equals(Object obj) {
-        return obj == this || obj instanceof BinaryProcedureProcedure<?>
-                && equals((BinaryProcedureProcedure<?>) obj);
-    }
-
-    /**
-     * Learn whether another BinaryProcedureProcedure is equal to
-     * <code>this</code>.
-     *
-     * @param that BinaryProcedureProcedure to check
-     *
-     * @return whether equal
-     */
-    public boolean equals(BinaryProcedureProcedure<?> that) {
-        return that != null && that.procedure.equals(this.procedure);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryProcedureProcedure<?>)) {
+            return false;
+        }
+        BinaryProcedureProcedure<?> that = (BinaryProcedureProcedure<?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryFunction.java
index 8d3b443..f871536 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryFunction.java
@@ -74,19 +74,14 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof BoundNullaryFunction<?> && equals((BoundNullaryFunction<?>) that));
-    }
-
-    /**
-     * Learn whether another BoundNullaryFunction is equal to this.
-     * @param that BoundNullaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(BoundNullaryFunction<?> that) {
-        if (that == null) {
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BoundNullaryFunction<?>)) {
             return false;
         }
+        BoundNullaryFunction<?> that = (BoundNullaryFunction<?>) obj;
         if (!(that.function.equals(this.function))) {
             return false;
         }
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryPredicate.java
index de65796..3a60b7f 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryPredicate.java
@@ -73,20 +73,16 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof BoundNullaryPredicate && equals((BoundNullaryPredicate) that));
-    }
-
-    /**
-     * Learn whether another BoundNullaryPredicate is equal to this.
-     * @param that BoundNullaryPredicate to test
-     * @return boolean
-     */
-    public boolean equals(BoundNullaryPredicate that) {
-        return null != that
-                && predicate.equals(that.predicate)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BoundNullaryPredicate)) {
+            return false;
+        }
+        BoundNullaryPredicate that = (BoundNullaryPredicate) obj;
+        return predicate.equals(that.predicate)
                 && (null == param ? null == that.param : param.equals(that.param));
-
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryProcedure.java
index 2024244..5789d6c 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/BoundNullaryProcedure.java
@@ -73,18 +73,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof BoundNullaryProcedure && equals((BoundNullaryProcedure) that));
-    }
-
-    /**
-     * Learn whether a given BoundNullaryProcedure is equal to this.
-     * @param that the BoundNullaryProcedure to test
-     * @return boolean
-     */
-    public boolean equals(BoundNullaryProcedure that) {
-        return null != that
-                && procedure.equals(that.procedure)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BoundNullaryProcedure)) {
+            return false;
+        }
+        BoundNullaryProcedure that = (BoundNullaryProcedure) obj;
+        return procedure.equals(that.procedure)
                 && (null == param ? null == that.param : param.equals(that.param));
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryFunction.java
index 2fbcb80..01a82aa 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryFunction.java
@@ -81,18 +81,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof FullyBoundNullaryFunction<?>
-                && equals((FullyBoundNullaryFunction<?>) that));
-    }
-
-    /**
-     * Learn whether another FullyBoundNullaryFunction is equal to this.
-     * @param that FullyBoundNullaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(FullyBoundNullaryFunction<?> that) {
-        return null != that && function.equals(that.function)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof FullyBoundNullaryFunction<?>)) {
+            return false;
+        }
+        FullyBoundNullaryFunction<?> that = (FullyBoundNullaryFunction<?>) obj;
+        return function.equals(that.function)
                 && (null == left ? null == that.left : left.equals(that.left))
                 && (null == right ? null == that.right : right.equals(that.right));
     }
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryPredicate.java
index ccfda26..ace11d3 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryPredicate.java
@@ -79,18 +79,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof FullyBoundNullaryPredicate
-                && equals((FullyBoundNullaryPredicate) that));
-    }
-
-    /**
-     * Learn whether another FullyBoundNullaryPredicate is equal to this.
-     * @param that FullyBoundNullaryPredicate to test
-     * @return boolean
-     */
-    public boolean equals(FullyBoundNullaryPredicate that) {
-        return null != that && predicate.equals(that.predicate)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof FullyBoundNullaryPredicate)) {
+            return false;
+        }
+        FullyBoundNullaryPredicate that = (FullyBoundNullaryPredicate) obj;
+        return predicate.equals(that.predicate)
                 && (null == left ? null == that.left : left.equals(that.left))
                 && (null == right ? null == that.right : right.equals(that.right));
     }
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryProcedure.java
index 3240e55..112538d 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/FullyBoundNullaryProcedure.java
@@ -78,18 +78,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof FullyBoundNullaryProcedure
-                && equals((FullyBoundNullaryProcedure) that));
-    }
-
-    /**
-     * Learn whether another FullyBoundNullaryProcedure is equal to this.
-     * @param that FullyBoundNullaryProcedure to test
-     * @return boolean
-     */
-    public boolean equals(FullyBoundNullaryProcedure that) {
-        return null != that && procedure.equals(that.procedure)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof FullyBoundNullaryProcedure)) {
+            return false;
+        }
+        FullyBoundNullaryProcedure that = (FullyBoundNullaryProcedure) obj;
+        return procedure.equals(that.procedure)
                 && (null == left ? null == that.left : left.equals(that.left))
                 && (null == right ? null == that.right : right.equals(that.right));
     }
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/FunctionPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/FunctionPredicate.java
index b3556c0..5a9de03 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/FunctionPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/FunctionPredicate.java
@@ -69,18 +69,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this
-                || (that instanceof FunctionPredicate<?> && equals((FunctionPredicate<?>) that));
-    }
-
-    /**
-     * Learn whether another FunctionPredicate is equal to this.
-     * @param that FunctionPredicate to test
-     * @return boolean
-     */
-    public boolean equals(FunctionPredicate<?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof FunctionPredicate<?>)) {
+            return false;
+        }
+        FunctionPredicate<?> that = (FunctionPredicate<?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/FunctionProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/FunctionProcedure.java
index af18a94..38d0d70 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/FunctionProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/FunctionProcedure.java
@@ -69,18 +69,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this
-                || (that instanceof FunctionProcedure<?> && equals((FunctionProcedure<?>) that));
-    }
-
-    /**
-     * Learn whether a specified FunctionPredicate is equal to this.
-     * @param that the FunctionPredicate to test
-     * @return boolean
-     */
-    public boolean equals(FunctionProcedure<?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof FunctionProcedure<?>)) {
+            return false;
+        }
+        FunctionProcedure<?> that = (FunctionProcedure<?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftFunction.java
index af577c7..9f8df3c 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftFunction.java
@@ -68,18 +68,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IgnoreLeftFunction<?, ?, ?>
-                && equals((IgnoreLeftFunction<?, ?, ?>) that));
-    }
-
-    /**
-     * Learn whether another IgnoreLeftFunction is equal to this.
-     * @param that IgnoreLeftFunction to test
-     * @return boolean
-     */
-    public boolean equals(IgnoreLeftFunction<?, ?, ?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof IgnoreLeftFunction<?, ?, ?>)) {
+            return false;
+        }
+        IgnoreLeftFunction<?, ?, ?> that = (IgnoreLeftFunction<?, ?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftPredicate.java
index 9d7cc8a..6dfa6c0 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftPredicate.java
@@ -67,17 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IgnoreLeftPredicate<?, ?> && equals((IgnoreLeftPredicate<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another IgnoreLeftPredicate is equal to this.
-     * @param that the IgnoreLeftPredicate to test
-     * @return boolean
-     */
-    public boolean equals(IgnoreLeftPredicate<?, ?> that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof IgnoreLeftPredicate<?, ?>)) {
+            return false;
+        }
+        IgnoreLeftPredicate<?, ?> that = (IgnoreLeftPredicate<?, ?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftProcedure.java
index 2a024c2..dc83a06 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreLeftProcedure.java
@@ -67,17 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IgnoreLeftProcedure<?, ?> && equals((IgnoreLeftProcedure<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another IgnoreLeftProcedure is equal to this.
-     * @param that IgnoreLeftProcedure to test
-     * @return boolean
-     */
-    public boolean equals(IgnoreLeftProcedure<?, ?> that) {
-        return null != that && procedure.equals(that.procedure);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof IgnoreLeftProcedure<?, ?>)) {
+            return false;
+        }
+        IgnoreLeftProcedure<?, ?> that = (IgnoreLeftProcedure<?, ?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightFunction.java
index 2772943..49b5067 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightFunction.java
@@ -68,18 +68,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IgnoreRightFunction<?, ?, ?>
-                                    && equals((IgnoreRightFunction<?, ?, ?>) that));
-    }
-
-    /**
-     * Learn whether another IgnoreRightFunction is equal to this.
-     * @param that IgnoreRightFunction to test
-     * @return boolean
-     */
-    public boolean equals(IgnoreRightFunction<?, ?, ?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof IgnoreRightFunction<?, ?, ?>)) {
+            return false;
+        }
+        IgnoreRightFunction<?, ?, ?> that = (IgnoreRightFunction<?, ?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightPredicate.java
index 7832f8f..faee607 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightPredicate.java
@@ -67,18 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IgnoreRightPredicate<?, ?>
-                                    && equals((IgnoreRightPredicate<?, ?>) that));
-    }
-
-    /**
-     * Learn whether a given IgnoreRightPredicate is equal to this.
-     * @param that IgnoreRightPredicate to test
-     * @return boolean
-     */
-    public boolean equals(IgnoreRightPredicate<?, ?> that) {
-        return null != that &&  predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof IgnoreRightPredicate<?, ?>)) {
+            return false;
+        }
+        IgnoreRightPredicate<?, ?> that = (IgnoreRightPredicate<?, ?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightProcedure.java
index 4b371ca..68ddb4f 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/IgnoreRightProcedure.java
@@ -67,18 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IgnoreRightProcedure<?, ?>
-                                    && equals((IgnoreRightProcedure<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another IgnoreRightProcedure is equal to this.
-     * @param that IgnoreRightProcedure to test
-     * @return boolean
-     */
-    public boolean equals(IgnoreRightProcedure<?, ?> that) {
-        return null != that && procedure.equals(that.procedure);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof IgnoreRightProcedure<?, ?>)) {
+            return false;
+        }
+        IgnoreRightProcedure<?, ?> that = (IgnoreRightProcedure<?, ?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundFunction.java
index f4059af..ff38f0b 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundFunction.java
@@ -75,19 +75,16 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof LeftBoundFunction<?, ?> && equals((LeftBoundFunction<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another LeftBoundFunction is equal to this.
-     * @param that LeftBoundFunction to test
-     * @return boolean
-     */
-    public boolean equals(LeftBoundFunction<?, ?> that) {
-        return null != that
-                && function.equals(that.function)
-                && (null == param ? null == that.param : param.equals(that.param));
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof LeftBoundFunction<?, ?>)) {
+            return false;
+        }
+        LeftBoundFunction<?, ?> that = (LeftBoundFunction<?, ?>) obj;
+        return this.function.equals(that.function)
+                && (null == this.param ? null == that.param : this.param.equals(that.param));
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundPredicate.java
index c9af90f..d363a10 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundPredicate.java
@@ -75,18 +75,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof LeftBoundPredicate<?> && equals((LeftBoundPredicate<?>) that));
-    }
-
-    /**
-     * Learn whether another LeftBoundPredicate is equal to this.
-     * @param that LeftBoundPredicate to test
-     * @return boolean
-     */
-    public boolean equals(LeftBoundPredicate<?> that) {
-        return null != that
-                && predicate.equals(that.predicate)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof LeftBoundPredicate<?>)) {
+            return false;
+        }
+        LeftBoundPredicate<?> that = (LeftBoundPredicate<?>) obj;
+        return predicate.equals(that.predicate)
                 && (null == param ? null == that.param : param.equals(that.param));
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundProcedure.java
index d3b9184..19699e1 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/LeftBoundProcedure.java
@@ -74,18 +74,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof LeftBoundProcedure<?> && equals((LeftBoundProcedure<?>) that));
-    }
-
-    /**
-     * Learn whether another LeftBoundProcedure is equal to this.
-     * @param that LeftBoundProcedure to test
-     * @return boolean
-     */
-    public boolean equals(LeftBoundProcedure<?> that) {
-        return null != that
-                && procedure.equals(that.procedure)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof LeftBoundProcedure<?>)) {
+            return false;
+        }
+        LeftBoundProcedure<?> that = (LeftBoundProcedure<?>) obj;
+        return procedure.equals(that.procedure)
                 && (null == param ? null == that.param : param.equals(that.param));
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionFunction.java
index 29191b9..25cefe2 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionFunction.java
@@ -67,18 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryFunctionFunction<?, ?>
-                && equals((NullaryFunctionFunction<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another NullaryFunctionFunction is equal to this.
-     * @param that NullaryFunctionFunction to test
-     * @return boolean
-     */
-    public boolean equals(NullaryFunctionFunction<?, ?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryFunctionFunction<?, ?>)) {
+            return false;
+        }
+        NullaryFunctionFunction<?, ?> that = (NullaryFunctionFunction<?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryPredicate.java
index f22bf04..a3de49a 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryPredicate.java
@@ -67,18 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryFunctionNullaryPredicate
-                && equals((NullaryFunctionNullaryPredicate) that));
-    }
-
-    /**
-     * Learn whether another NullaryFunctionNullaryPredicate is equal to this.
-     * @param that NullaryFunctionNullaryPredicate to test
-     * @return boolean
-     */
-    public boolean equals(NullaryFunctionNullaryPredicate that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryFunctionNullaryPredicate)) {
+            return false;
+        }
+        NullaryFunctionNullaryPredicate that = (NullaryFunctionNullaryPredicate) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryProcedure.java
index 9b9ace2..c067f22 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/NullaryFunctionNullaryProcedure.java
@@ -67,18 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryFunctionNullaryProcedure
-                && equals((NullaryFunctionNullaryProcedure) that));
-    }
-
-    /**
-     * Learn whether another NullaryFunctionNullaryProcedure is equal to this.
-     * @param that NullaryFunctionNullaryProcedure to test
-     * @return boolean
-     */
-    public boolean equals(NullaryFunctionNullaryProcedure that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryFunctionNullaryProcedure)) {
+            return false;
+        }
+        NullaryFunctionNullaryProcedure that = (NullaryFunctionNullaryProcedure) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicateNullaryFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicateNullaryFunction.java
index 56ab8ab..790b201 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicateNullaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicateNullaryFunction.java
@@ -69,18 +69,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryPredicateNullaryFunction
-                && equals((NullaryPredicateNullaryFunction) that));
-    }
-
-    /**
-     * Learn whether another NullaryPredicateNullaryFunction is equal to this.
-     * @param that NullaryPredicateNullaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(NullaryPredicateNullaryFunction that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryPredicateNullaryFunction)) {
+            return false;
+        }
+        NullaryPredicateNullaryFunction that = (NullaryPredicateNullaryFunction) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicatePredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicatePredicate.java
index bfc8f41..88f5c71 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicatePredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/NullaryPredicatePredicate.java
@@ -66,18 +66,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryPredicatePredicate<?>
-                                    && equals((NullaryPredicatePredicate<?>) that));
-    }
-
-    /**
-     * Learn whether a given NullaryPredicatePredicate is equal to this.
-     * @param that NullaryPredicatePredicate to test
-     * @return boolean
-     */
-    public boolean equals(NullaryPredicatePredicate<?> that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryPredicatePredicate<?>)) {
+            return false;
+        }
+        NullaryPredicatePredicate<?> that = (NullaryPredicatePredicate<?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureNullaryFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureNullaryFunction.java
index 28fbab2..25f021a 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureNullaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureNullaryFunction.java
@@ -67,18 +67,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryProcedureNullaryFunction<?>
-                && equals((NullaryProcedureNullaryFunction<?>) that));
-    }
-
-    /**
-     * Learn whether another NullaryProcedureNullaryFunction is equal to this.
-     * @param that NullaryProcedureNullaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(NullaryProcedureNullaryFunction<?> that) {
-        return null != that && procedure.equals(that.procedure);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryProcedureNullaryFunction<?>)) {
+            return false;
+        }
+        NullaryProcedureNullaryFunction<?> that = (NullaryProcedureNullaryFunction<?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureProcedure.java
index 7de8824..1479bcd 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/NullaryProcedureProcedure.java
@@ -66,18 +66,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryProcedureProcedure<?>
-                                    && equals((NullaryProcedureProcedure<?>) that));
-    }
-
-    /**
-     * Learn whether another NullaryProcedureProcedure is equal to this.
-     * @param that NullaryProcedureProcedure to test
-     * @return boolean
-     */
-    public boolean equals(NullaryProcedureProcedure<?> that) {
-        return null != that && procedure.equals(that.procedure);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryProcedureProcedure<?>)) {
+            return false;
+        }
+        NullaryProcedureProcedure<?> that = (NullaryProcedureProcedure<?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/PredicateFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/PredicateFunction.java
index dfe213d..c575bf7 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/PredicateFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/PredicateFunction.java
@@ -70,18 +70,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this
-                || (that instanceof PredicateFunction<?> && equals((PredicateFunction<?>) that));
-    }
-
-    /**
-     * Learn whether another PredicateFunction is equal to this.
-     * @param that PredicateFunction to test
-     * @return boolean
-     */
-    public boolean equals(PredicateFunction<?> that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof PredicateFunction<?>)) {
+            return false;
+        }
+        PredicateFunction<?> that = (PredicateFunction<?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/ProcedureFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/ProcedureFunction.java
index f2fc7ce..2511f43 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/ProcedureFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/ProcedureFunction.java
@@ -68,18 +68,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ProcedureFunction<?, ?>
-                                    && equals((ProcedureFunction<?, ?>) that));
-    }
-
-    /**
-     * Learn whether a given ProcedureFunction is equal to this.
-     * @param that ProcedureFunction to test
-     * @return boolean
-     */
-    public boolean equals(ProcedureFunction<?, ?> that) {
-        return null != that && procedure.equals(that.procedure);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ProcedureFunction<?, ?>)) {
+            return false;
+        }
+        ProcedureFunction<?, ?> that = (ProcedureFunction<?, ?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/RightBoundFunction.java b/core/src/main/java/org/apache/commons/functor/adapter/RightBoundFunction.java
index 02c75a7..3321ba8 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/RightBoundFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/RightBoundFunction.java
@@ -74,18 +74,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof RightBoundFunction<?, ?> && equals((RightBoundFunction<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another RightBoundFunction is equal to this.
-     * @param that RightBoundFunction to test
-     * @return boolean
-     */
-    public boolean equals(RightBoundFunction<?, ?> that) {
-        return null != that
-                && function.equals(that.function)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof RightBoundFunction<?, ?>)) {
+            return false;
+        }
+        RightBoundFunction<?, ?> that = (RightBoundFunction<?, ?>) obj;
+        return function.equals(that.function)
                 && (null == param ? null == that.param : param.equals(that.param));
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/RightBoundPredicate.java b/core/src/main/java/org/apache/commons/functor/adapter/RightBoundPredicate.java
index 130c85e..8f8a62c 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/RightBoundPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/RightBoundPredicate.java
@@ -74,19 +74,16 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof RightBoundPredicate<?> && equals((RightBoundPredicate<?>) that));
-    }
-
-    /**
-     * Learn whether another RightBoundPredicate is equal to this.
-     * @param that RightBoundPredicate to test
-     * @return boolean
-     */
-    public boolean equals(RightBoundPredicate<?> that) {
-        return null != that
-                && predicate.equals(that.predicate)
-                && (null == param ? null == that.param : param.equals(that.param));
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof RightBoundPredicate<?>)) {
+            return false;
+        }
+        RightBoundPredicate<?> that = (RightBoundPredicate<?>) obj;
+        return this.predicate.equals(that.predicate)
+                && (null == this.param ? null == that.param : this.param.equals(that.param));
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/adapter/RightBoundProcedure.java b/core/src/main/java/org/apache/commons/functor/adapter/RightBoundProcedure.java
index 5e0436c..7853c79 100644
--- a/core/src/main/java/org/apache/commons/functor/adapter/RightBoundProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/adapter/RightBoundProcedure.java
@@ -74,18 +74,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof RightBoundProcedure<?> && equals((RightBoundProcedure<?>) that));
-    }
-
-    /**
-     * Learn whether another RightBoundProcedure is equal to this.
-     * @param that RightBoundProcedure to test
-     * @return boolean
-     */
-    public boolean equals(RightBoundProcedure<?> that) {
-        return null != that
-                && procedure.equals(that.procedure)
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof RightBoundProcedure<?>)) {
+            return false;
+        }
+        RightBoundProcedure<?> that = (RightBoundProcedure<?>) obj;
+        return this.procedure.equals(that.procedure)
                 && (null == param ? null == that.param : param.equals(that.param));
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/core/Constant.java b/core/src/main/java/org/apache/commons/functor/core/Constant.java
index d2c432c..a0a4f7e 100644
--- a/core/src/main/java/org/apache/commons/functor/core/Constant.java
+++ b/core/src/main/java/org/apache/commons/functor/core/Constant.java
@@ -127,17 +127,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof Constant<?> && equals((Constant<?>) that));
-    }
-
-    /**
-     * Learn whether another Constant is equal to this.
-     * @param that Constant to test
-     * @return boolean
-     */
-    public boolean equals(Constant<?> that) {
-        return (null != that && (null == this.value ? null == that.value : this.value.equals(that.value)));
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof Constant<?>)) {
+            return false;
+        }
+        Constant<?> that = (Constant<?>) obj;
+        return null == this.value ? null == that.value : this.value.equals(that.value);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java b/core/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java
index 0c788a7..c8daf53 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/ComparatorFunction.java
@@ -65,17 +65,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ComparatorFunction<?> && equals((ComparatorFunction<?>) that));
-    }
-
-    /**
-     * Learn whether a specified ComparatorFunction is equal to this.
-     * @param that the ComparatorFunction to test
-     * @return boolean
-     */
-    public boolean equals(ComparatorFunction<?> that) {
-        return null != that && comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ComparatorFunction<?>)) {
+            return false;
+        }
+        ComparatorFunction<?> that = (ComparatorFunction<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java b/core/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java
index ce17283..fef2625 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/IsEquivalent.java
@@ -86,20 +86,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IsEquivalent<?> && equals((IsEquivalent<?>) that));
-    }
-
-    /**
-     * Learn whether a given IsEquivalent is equal to this.
-     * @param that IsEquivalent to test
-     * @return boolean
-     */
-    public boolean equals(IsEquivalent<?> that) {
-        if (null != that) {
-            return comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
         }
-        return false;
+        if (!(obj instanceof IsEquivalent<?>)) {
+            return false;
+        }
+        IsEquivalent<?> that = (IsEquivalent<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java b/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java
index a8532e3..4eb0ab2 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThan.java
@@ -86,20 +86,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IsGreaterThan<?> && equals((IsGreaterThan<?>) that));
-    }
-
-    /**
-     * Learn whether a given IsGreaterThan is equal to this.
-     * @param that the IsGreaterThan to test
-     * @return boolean
-     */
-    public boolean equals(IsGreaterThan<?> that) {
-        if (null != that) {
-            return comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
         }
-        return false;
+        if (!(obj instanceof IsGreaterThan<?>)) {
+            return false;
+        }
+        IsGreaterThan<?> that = (IsGreaterThan<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java b/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java
index c68aa4c..ab38de9 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/IsGreaterThanOrEqual.java
@@ -87,20 +87,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IsGreaterThanOrEqual<?> && equals((IsGreaterThanOrEqual<?>) that));
-    }
-
-    /**
-     * Learn whether another IsGreaterThanOrEqual is equal to this.
-     * @param that IsGreaterThanOrEqual to test
-     * @return boolean
-     */
-    public boolean equals(IsGreaterThanOrEqual<?> that) {
-        if (null != that) {
-            return comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
         }
-        return false;
+        if (!(obj instanceof IsGreaterThanOrEqual<?>)) {
+            return false;
+        }
+        IsGreaterThanOrEqual<?> that = (IsGreaterThanOrEqual<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java b/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java
index d575b2f..91ba1ad 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThan.java
@@ -86,20 +86,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IsLessThan<?> && equals((IsLessThan<?>) that));
-    }
-
-    /**
-     * Learn whether a given IsLessThan is equal to this.
-     * @param that IsLessThan to test
-     * @return boolean
-     */
-    public boolean equals(IsLessThan<?> that) {
-        if (null != that) {
-            return comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
         }
-        return false;
+        if (!(obj instanceof IsLessThan<?>)) {
+            return false;
+        }
+        IsLessThan<?> that = (IsLessThan<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java b/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java
index 70e0f4e..c42c462 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/IsLessThanOrEqual.java
@@ -86,20 +86,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IsLessThanOrEqual<?> && equals((IsLessThanOrEqual<?>) that));
-    }
-
-    /**
-     * Learn whether another IsLessThanOrEqual is equal to this.
-     * @param that the IsLessThanOrEqual to test.
-     * @return boolean
-     */
-    public boolean equals(IsLessThanOrEqual<?> that) {
-        if (null != that) {
-            return comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
         }
-        return false;
+        if (!(obj instanceof IsLessThanOrEqual<?>)) {
+            return false;
+        }
+        IsLessThanOrEqual<?> that = (IsLessThanOrEqual<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java b/core/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java
index 71690fb..84df0b7 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/IsNotEquivalent.java
@@ -86,20 +86,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof IsNotEquivalent<?> && equals((IsNotEquivalent<?>) that));
-    }
-
-    /**
-     * Learn whether another IsNotEquivalent is equal to this.
-     * @param that IsNotEquivalent to test
-     * @return boolean
-     */
-    public boolean equals(IsNotEquivalent<?> that) {
-        if (null != that) {
-            return comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
         }
-        return false;
+        if (!(obj instanceof IsNotEquivalent<?>)) {
+            return false;
+        }
+        IsNotEquivalent<?> that = (IsNotEquivalent<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/Max.java b/core/src/main/java/org/apache/commons/functor/core/comparator/Max.java
index 40b553a..218a0a9 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/Max.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/Max.java
@@ -75,17 +75,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof Max<?> && equals((Max<?>) that));
-    }
-
-    /**
-     * Learn whether another Max is equal to this.
-     * @param that Max to test
-     * @return boolean
-     */
-    public boolean equals(Max<?> that) {
-        return null != that && comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof Max<?>)) {
+            return false;
+        }
+        Max<?> that = (Max<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/comparator/Min.java b/core/src/main/java/org/apache/commons/functor/core/comparator/Min.java
index cf3211e..4cf0039 100644
--- a/core/src/main/java/org/apache/commons/functor/core/comparator/Min.java
+++ b/core/src/main/java/org/apache/commons/functor/core/comparator/Min.java
@@ -75,17 +75,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof Min<?> && equals((Min<?>) that));
-    }
-
-    /**
-     * Learn whether another Min is equal to this.
-     * @param that Min to test
-     * @return boolean
-     */
-    public boolean equals(Min<?> that) {
-        return null != that && comparator.equals(that.comparator);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof Min<?>)) {
+            return false;
+        }
+        Min<?> that = (Min<?>) obj;
+        return this.comparator.equals(that.comparator);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/And.java b/core/src/main/java/org/apache/commons/functor/core/composite/And.java
index 55274ef..05fb2c0 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/And.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/And.java
@@ -98,16 +98,14 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof And<?> && equals((And<?>) that));
-    }
-
-    /**
-     * Learn whether another And is equal to this.
-     * @param that And to test
-     * @return boolean
-     */
-    public boolean equals(And<?> that) {
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof And<?>)) {
+            return false;
+        }
+        And<?> that = (And<?>) obj;
         return getPredicateListEquals(that);
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryAnd.java b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryAnd.java
index 9973298..c9a7654 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryAnd.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryAnd.java
@@ -99,16 +99,14 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof BinaryAnd<?, ?> && equals((BinaryAnd<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinaryAnd is equal to this.
-     * @param that the BinaryAnd to test
-     * @return boolean
-     */
-    public boolean equals(BinaryAnd<?, ?> that) {
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryAnd<?, ?>)) {
+            return false;
+        }
+        BinaryAnd<?, ?> that = (BinaryAnd<?, ?>) obj;
         return getBinaryPredicateListEquals(that);
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryCompositeBinaryFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryCompositeBinaryFunction.java
index 25d10d5..2b8b80c 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryCompositeBinaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryCompositeBinaryFunction.java
@@ -133,21 +133,17 @@
      * {@inheritDoc}
      */
     @Override
-    public final boolean equals(Object that) {
-        return that == this || (that instanceof BinaryCompositeBinaryFunction<?, ?, ?>
-                                    && equals((BinaryCompositeBinaryFunction<?, ?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinaryCompositeBinaryFunction is equal to this.
-     * @param that BinaryCompositeBinaryFunction to test
-     * @return boolean
-     */
-    public final boolean equals(BinaryCompositeBinaryFunction<?, ?, ?> that) {
-        return null != that
-                && helper.f.equals(that.helper.f)
-                && helper.g.equals(that.helper.g)
-                && helper.h.equals(that.helper.h);
+    public final boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryCompositeBinaryFunction<?, ?, ?>)) {
+            return false;
+        }
+        BinaryCompositeBinaryFunction<?, ?, ?> that = (BinaryCompositeBinaryFunction<?, ?, ?>) obj;
+        return this.helper.f.equals(that.helper.f)
+                && this.helper.g.equals(that.helper.g)
+                && this.helper.h.equals(that.helper.h);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryNot.java b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryNot.java
index c2c459e..b2051a3 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryNot.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryNot.java
@@ -71,17 +71,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof BinaryNot<?, ?> && equals((BinaryNot<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinaryNot is equal to this.
-     * @param that BinaryNot to test
-     * @return boolean
-     */
-    public boolean equals(BinaryNot<?, ?> that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryNot<?, ?>)) {
+            return false;
+        }
+        BinaryNot<?, ?> that = (BinaryNot<?, ?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryOr.java b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryOr.java
index 704a363..08a4726 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/BinaryOr.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/BinaryOr.java
@@ -99,16 +99,14 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof BinaryOr<?, ?> && equals((BinaryOr<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinaryOr is equal to this.
-     * @param that BinaryOr to test
-     * @return boolean
-     */
-    public boolean equals(BinaryOr<?, ?> that) {
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinaryOr<?, ?>)) {
+            return false;
+        }
+        BinaryOr<?, ?> that = (BinaryOr<?, ?>) obj;
         return getBinaryPredicateListEquals(that);
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/BinarySequence.java b/core/src/main/java/org/apache/commons/functor/core/composite/BinarySequence.java
index a6b9036..df9a85f 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/BinarySequence.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/BinarySequence.java
@@ -117,18 +117,15 @@
      * {@inheritDoc}
      */
     @Override
-    public final boolean equals(Object that) {
-        return that == this || (that instanceof BinarySequence<?, ?> && equals((BinarySequence<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another BinarySequence is equal to this.
-     * @param that BinarySequence to test
-     * @return boolean
-     */
-    public final boolean equals(BinarySequence<?, ?> that) {
-        // by construction, list is never null
-        return null != that && list.equals(that.list);
+    public final boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof BinarySequence<?, ?>)) {
+            return false;
+        }
+        BinarySequence<?, ?> that = (BinarySequence<?, ?>) obj;
+        return this.list.equals(that.list);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryFunction.java
index 2e419d5..a329004 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryFunction.java
@@ -137,21 +137,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof CompositeBinaryFunction<?, ?, ?>
-                                    && equals((CompositeBinaryFunction<?, ?, ?>) that));
-    }
-
-    /**
-     * Learn whether a given CompositeBinaryFunction is equal to this.
-     * @param that CompositeBinaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(CompositeBinaryFunction<?, ?, ?> that) {
-        return null != that
-                && helper.f.equals(that.helper.f)
-                && helper.g.equals(that.helper.g)
-                && helper.h.equals(that.helper.h);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof CompositeBinaryFunction<?, ?, ?>)) {
+            return false;
+        }
+        CompositeBinaryFunction<?, ?, ?> that = (CompositeBinaryFunction<?, ?, ?>) obj;
+        return this.helper.f.equals(that.helper.f)
+                && this.helper.g.equals(that.helper.g)
+                && this.helper.h.equals(that.helper.h);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryPredicate.java b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryPredicate.java
index 5a067ab..a64fa5d 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeBinaryPredicate.java
@@ -136,19 +136,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof CompositeBinaryPredicate<?, ?>
-                                    && equals((CompositeBinaryPredicate<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another CompositeBinaryPredicate is equal to this.
-     * @param that CompositeBinaryPredicate to test
-     * @return boolean
-     */
-    public boolean equals(CompositeBinaryPredicate<?, ?> that) {
-        return null != that && helper.f.equals(that.helper.f) && helper.g.equals(that.helper.g)
-                && helper.h.equals(that.helper.h);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof CompositeBinaryPredicate<?, ?>)) {
+            return false;
+        }
+        CompositeBinaryPredicate<?, ?> that = (CompositeBinaryPredicate<?, ?>) obj;
+        return this.helper.f.equals(that.helper.f)
+                && this.helper.g.equals(that.helper.g)
+                && this.helper.h.equals(that.helper.h);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeFunction.java
index 4179fff..8ff99c2 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeFunction.java
@@ -184,19 +184,15 @@
      * {@inheritDoc}
      */
     @Override
-    public final boolean equals(Object that) {
-        return that == this
-                || (that instanceof CompositeFunction<?, ?> && equals((CompositeFunction<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another CompositeFunction is equal to this.
-     * @param that CompositeFunction to test
-     * @return boolean
-     */
-    public final boolean equals(CompositeFunction<?, ?> that) {
-        // by construction, list is never null
-        return null != that && function.equals(that.function);
+    public final boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof CompositeFunction<?, ?>)) {
+            return false;
+        }
+        CompositeFunction<?, ?> that = (CompositeFunction<?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/CompositePredicate.java b/core/src/main/java/org/apache/commons/functor/core/composite/CompositePredicate.java
index 5d2a247..de49166 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/CompositePredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/CompositePredicate.java
@@ -104,18 +104,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof CompositePredicate<?>
-                                    && equals((CompositePredicate<?>) that));
-    }
-
-    /**
-     * Learn whether another CompositePredicate is equal to this.
-     * @param that CompositePredicate to test
-     * @return boolean
-     */
-    public boolean equals(CompositePredicate<?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof CompositePredicate<?>)) {
+            return false;
+        }
+        CompositePredicate<?> that = (CompositePredicate<?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeProcedure.java b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeProcedure.java
index f89c2cb..26af8aa 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/CompositeProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/CompositeProcedure.java
@@ -104,18 +104,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof CompositeProcedure<?>
-                                    && equals((CompositeProcedure<?>) that));
-    }
-
-    /**
-     * Learn whether another CompositeProcedure is equal to this.
-     * @param that CompositeProcedure to test
-     * @return boolean
-     */
-    public boolean equals(CompositeProcedure<?> that) {
-        return null != that && function.equals(that.function);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof CompositeProcedure<?>)) {
+            return false;
+        }
+        CompositeProcedure<?> that = (CompositeProcedure<?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryFunction.java
index 9a07a01..85f3135 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryFunction.java
@@ -100,21 +100,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalBinaryFunction<?, ?, ?>
-                                    && equals((ConditionalBinaryFunction<?, ?, ?>) that));
-    }
-
-    /**
-     * Learn whether another ConditionalBinaryFunction is equal to this.
-     * @param that ConditionalBinaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalBinaryFunction<?, ?, ?> that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenFunc.equals(that.thenFunc)
-                && elseFunc.equals(that.elseFunc);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalBinaryFunction<?, ?, ?>)) {
+            return false;
+        }
+        ConditionalBinaryFunction<?, ?, ?> that = (ConditionalBinaryFunction<?, ?, ?>) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenFunc.equals(that.thenFunc)
+                && this.elseFunc.equals(that.elseFunc);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryPredicate.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryPredicate.java
index 8b72c4a..dafabf5 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryPredicate.java
@@ -93,21 +93,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalBinaryPredicate<?, ?>
-                                    && equals((ConditionalBinaryPredicate<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another ConditionalBinaryPredicate is equal to this.
-     * @param that ConditionalBinaryPredicate to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalBinaryPredicate<?, ?> that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenPred.equals(that.thenPred)
-                && elsePred.equals(that.elsePred);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalBinaryPredicate<?, ?>)) {
+            return false;
+        }
+        ConditionalBinaryPredicate<?, ?> that = (ConditionalBinaryPredicate<?, ?>) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenPred.equals(that.thenPred)
+                && this.elsePred.equals(that.elsePred);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryProcedure.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryProcedure.java
index a7f88b4..11843f3 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalBinaryProcedure.java
@@ -111,21 +111,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalBinaryProcedure<?, ?>
-                                    && equals((ConditionalBinaryProcedure<?, ?>) that));
-    }
-
-    /**
-     * Learn whether a given ConditionalBinaryProcedure is equal to this.
-     * @param that compared object
-     * @return boolean
-     */
-    public boolean equals(ConditionalBinaryProcedure<?, ?> that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenProc.equals(that.thenProc)
-                && elseProc.equals(that.elseProc);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalBinaryProcedure<?, ?>)) {
+            return false;
+        }
+        ConditionalBinaryProcedure<?, ?> that = (ConditionalBinaryProcedure<?, ?>) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenProc.equals(that.thenProc)
+                && this.elseProc.equals(that.elseProc);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalFunction.java
index e057a7c..1c9871c 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalFunction.java
@@ -98,21 +98,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalFunction<?, ?>
-                                    && equals((ConditionalFunction<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another ConditionalFunction is equal to this.
-     * @param that ConditionalFunction to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalFunction<?, ?> that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenFunc.equals(that.thenFunc)
-                && elseFunc.equals(that.elseFunc);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalFunction<?, ?>)) {
+            return false;
+        }
+        ConditionalFunction<?, ?> that = (ConditionalFunction<?, ?>) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenFunc.equals(that.thenFunc)
+                && this.elseFunc.equals(that.elseFunc);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryFunction.java
index b5afa44..74ddd28 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryFunction.java
@@ -97,21 +97,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalNullaryFunction<?>
-                && equals((ConditionalNullaryFunction<?>) that));
-    }
-
-    /**
-     * Learn whether another ConditionalNullaryFunction is equal to this.
-     * @param that ConditionalNullaryFunction to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalNullaryFunction<?> that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenFunc.equals(that.thenFunc)
-                && elseFunc.equals(that.elseFunc);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalNullaryFunction<?>)) {
+            return false;
+        }
+        ConditionalNullaryFunction<?> that = (ConditionalNullaryFunction<?>) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenFunc.equals(that.thenFunc)
+                && this.elseFunc.equals(that.elseFunc);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryPredicate.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryPredicate.java
index b3f509c..991c432 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryPredicate.java
@@ -90,21 +90,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalNullaryPredicate
-                && equals((ConditionalNullaryPredicate) that));
-    }
-
-    /**
-     * Learn whether another ConditionalNullaryPredicate is equal to this.
-     * @param that ConditionalNullaryPredicate to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalNullaryPredicate that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenPred.equals(that.thenPred)
-                && elsePred.equals(that.elsePred);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalNullaryPredicate)) {
+            return false;
+        }
+        ConditionalNullaryPredicate that = (ConditionalNullaryPredicate) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenPred.equals(that.thenPred)
+                && this.elsePred.equals(that.elsePred);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryProcedure.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryProcedure.java
index 3e35885..417a135 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalNullaryProcedure.java
@@ -105,21 +105,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalNullaryProcedure
-                && equals((ConditionalNullaryProcedure) that));
-    }
-
-    /**
-     * Learn whether another ConditionalProcecure is equal to this.
-     * @param that the ConditionalNullaryProcedure to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalNullaryProcedure that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenProc.equals(that.thenProc)
-                && elseProc.equals(that.elseProc);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalNullaryProcedure)) {
+            return false;
+        }
+        ConditionalNullaryProcedure that = (ConditionalNullaryProcedure) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenProc.equals(that.thenProc)
+                && this.elseProc.equals(that.elseProc);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalPredicate.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalPredicate.java
index a9e8502..bafb81e 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalPredicate.java
@@ -92,21 +92,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalPredicate<?>
-                                    && equals((ConditionalPredicate<?>) that));
-    }
-
-    /**
-     * Learn whether another ConditionalPredicate is equal to this.
-     * @param that ConditionalPredicate to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalPredicate<?> that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenPred.equals(that.thenPred)
-                && elsePred.equals(that.elsePred);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalPredicate<?>)) {
+            return false;
+        }
+        ConditionalPredicate<?> that = (ConditionalPredicate<?>) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenPred.equals(that.thenPred)
+                && this.elsePred.equals(that.elsePred);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalProcedure.java b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalProcedure.java
index 73f24b5..e10951e 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/ConditionalProcedure.java
@@ -107,21 +107,17 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof ConditionalProcedure<?>
-                                    && equals((ConditionalProcedure<?>) that));
-    }
-
-    /**
-     * Learn whether another ConditionalProcedure is equal to this.
-     * @param that ConditionalProcedure to test
-     * @return boolean
-     */
-    public boolean equals(ConditionalProcedure<?> that) {
-        return null != that
-                && ifPred.equals(that.ifPred)
-                && thenProc.equals(that.thenProc)
-                && elseProc.equals(that.elseProc);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof ConditionalProcedure<?>)) {
+            return false;
+        }
+        ConditionalProcedure<?> that = (ConditionalProcedure<?>) obj;
+        return this.ifPred.equals(that.ifPred)
+                && this.thenProc.equals(that.thenProc)
+                && this.elseProc.equals(that.elseProc);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/Not.java b/core/src/main/java/org/apache/commons/functor/core/composite/Not.java
index 939343e..96d80ca 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/Not.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/Not.java
@@ -70,17 +70,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof Not<?> && equals((Not<?>) that));
-    }
-
-    /**
-     * Learn whether another Not is equal to this.
-     * @param that Not to test
-     * @return boolean
-     */
-    public boolean equals(Not<?> that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof Not<?>)) {
+            return false;
+        }
+        Not<?> that = (Not<?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/NullaryAnd.java b/core/src/main/java/org/apache/commons/functor/core/composite/NullaryAnd.java
index 9b0f67d..5885a7b 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/NullaryAnd.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/NullaryAnd.java
@@ -98,16 +98,14 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryAnd && equals((NullaryAnd) that));
-    }
-
-    /**
-     * Learn whether a given And is equal to this.
-     * @param that the And to test
-     * @return boolean
-     */
-    public boolean equals(NullaryAnd that) {
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryAnd)) {
+            return false;
+        }
+        NullaryAnd that = (NullaryAnd) obj;
         return getNullaryPredicateListEquals(that);
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/NullaryNot.java b/core/src/main/java/org/apache/commons/functor/core/composite/NullaryNot.java
index ba973b3..97c0e72 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/NullaryNot.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/NullaryNot.java
@@ -70,17 +70,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryNot && equals((NullaryNot) that));
-    }
-
-    /**
-     * Learn whether another NullaryNot is equal to this.
-     * @param that the NullaryNot to test
-     * @return boolean
-     */
-    public boolean equals(NullaryNot that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryNot)) {
+            return false;
+        }
+        NullaryNot that = (NullaryNot) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/NullaryOr.java b/core/src/main/java/org/apache/commons/functor/core/composite/NullaryOr.java
index 02f10c5..84c17ee 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/NullaryOr.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/NullaryOr.java
@@ -95,16 +95,14 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof NullaryOr && equals((NullaryOr) that));
-    }
-
-    /**
-     * Learn whether another NullaryOr is equal to this.
-     * @param that NullaryOr to test
-     * @return boolean
-     */
-    public boolean equals(NullaryOr that) {
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof NullaryOr)) {
+            return false;
+        }
+        NullaryOr that = (NullaryOr) obj;
         return getNullaryPredicateListEquals(that);
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/NullarySequence.java b/core/src/main/java/org/apache/commons/functor/core/composite/NullarySequence.java
index ced5b45..359e781 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/NullarySequence.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/NullarySequence.java
@@ -118,18 +118,15 @@
      * {@inheritDoc}
      */
     @Override
-    public final boolean equals(Object that) {
-        return that == this || (that instanceof NullarySequence && equals((NullarySequence) that));
-    }
-
-    /**
-     * Learn whether a given NullarySequence is equal to this.
-     * @param that NullarySequence to test
-     * @return boolean
-     */
-    public boolean equals(NullarySequence that) {
-        // by construction, list is never null
-        return null != that && list.equals(that.list);
+    public final boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof NullarySequence)) {
+            return false;
+        }
+        NullarySequence that = (NullarySequence) obj;
+        return this.list.equals(that.list);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/Or.java b/core/src/main/java/org/apache/commons/functor/core/composite/Or.java
index 56dd3a8..7cf89c0 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/Or.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/Or.java
@@ -98,16 +98,14 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof Or<?> && equals((Or<?>) that));
-    }
-
-    /**
-     * Learn whether another Or is equal to this.
-     * @param that Or to test
-     * @return boolean
-     */
-    public boolean equals(Or<?> that) {
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof Or<?>)) {
+            return false;
+        }
+        Or<?> that = (Or<?>) obj;
         return getPredicateListEquals(that);
     }
 
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/Sequence.java b/core/src/main/java/org/apache/commons/functor/core/composite/Sequence.java
index fc9d911..17d3669 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/Sequence.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/Sequence.java
@@ -119,18 +119,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof Sequence<?> && equals((Sequence<?>) that));
-    }
-
-    /**
-     * Learn whether another Sequence is equal to this.
-     * @param that Sequence to test
-     * @return boolean
-     */
-    public boolean equals(Sequence<?> that) {
-        // by construction, list is never null
-        return null != that && list.equals(that.list);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof Sequence<?>)) {
+            return false;
+        }
+        Sequence<?> that = (Sequence<?>) obj;
+        return this.list.equals(that.list);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryFunction.java
index 25504f7..a598ebb 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryFunction.java
@@ -102,18 +102,15 @@
      */
     @Override
     public final boolean equals(Object obj) {
-        return obj == this || obj instanceof TransformedBinaryFunction<?, ?, ?>
-                && equals((TransformedBinaryFunction<?, ?, ?>) obj);
-    }
-
-    /**
-     * Learn whether another TransformedBinaryFunction is equal to <code>this</code>.
-     * @param that instance to test
-     * @return whether equal
-     */
-    public final boolean equals(TransformedBinaryFunction<?, ?, ?> that) {
-        return that != null && that.helper.preceding.equals(this.helper.preceding)
-                && that.helper.following.equals(this.helper.following);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof TransformedBinaryFunction<?, ?, ?>)) {
+            return false;
+        }
+        TransformedBinaryFunction<?, ?, ?> that = (TransformedBinaryFunction<?, ?, ?>) obj;
+        return this.helper.preceding.equals(that.helper.preceding)
+                && this.helper.following.equals(that.helper.following);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryProcedure.java b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryProcedure.java
index c3f1012..4d2ef85 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedBinaryProcedure.java
@@ -102,18 +102,15 @@
      */
     @Override
     public final boolean equals(Object obj) {
-        return obj == this || obj instanceof TransformedBinaryProcedure<?, ?>
-                && equals((TransformedBinaryProcedure<?, ?>) obj);
-    }
-
-    /**
-     * Learn whether another TransformedBinaryProcedure is equal to <code>this</code>.
-     * @param that instance to test
-     * @return whether equal
-     */
-    public final boolean equals(TransformedBinaryProcedure<?, ?> that) {
-        return that != null && that.helper.function.equals(this.helper.function)
-                && that.helper.procedure.equals(this.helper.procedure);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof TransformedBinaryProcedure<?, ?>)) {
+            return false;
+        }
+        TransformedBinaryProcedure<?, ?> that = (TransformedBinaryProcedure<?, ?>) obj;
+        return this.helper.function.equals(that.helper.function)
+                && this.helper.procedure.equals(that.helper.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryFunction.java
index d4766e6..2a38a03 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryFunction.java
@@ -99,18 +99,15 @@
      */
     @Override
     public final boolean equals(Object obj) {
-        return obj == this || obj instanceof TransformedNullaryFunction<?>
-                && equals((TransformedNullaryFunction<?>) obj);
-    }
-
-    /**
-     * Learn whether another TransformedNullaryFunction is equal to <code>this</code>.
-     * @param that instance to test
-     * @return whether equal
-     */
-    public final boolean equals(TransformedNullaryFunction<?> that) {
-        return that != null && that.helper.preceding.equals(this.helper.preceding)
-                && that.helper.following.equals(this.helper.following);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof TransformedNullaryFunction<?>)) {
+            return false;
+        }
+        TransformedNullaryFunction<?> that = (TransformedNullaryFunction<?>) obj;
+        return this.helper.preceding.equals(that.helper.preceding)
+                && this.helper.following.equals(that.helper.following);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryProcedure.java b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryProcedure.java
index 4d5a760..5e61bbb 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/TransformedNullaryProcedure.java
@@ -99,18 +99,15 @@
      */
     @Override
     public final boolean equals(Object obj) {
-        return obj == this || obj instanceof TransformedNullaryProcedure
-                && equals((TransformedNullaryProcedure) obj);
-    }
-
-    /**
-     * Learn whether another TransformedNullaryProcedure is equal to <code>this</code>.
-     * @param that instance to test
-     * @return whether equal
-     */
-    public final boolean equals(TransformedNullaryProcedure that) {
-        return that != null && that.helper.function.equals(this.helper.function)
-                && that.helper.procedure.equals(this.helper.procedure);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof TransformedNullaryProcedure)) {
+            return false;
+        }
+        TransformedNullaryProcedure that = (TransformedNullaryProcedure) obj;
+        return this.helper.function.equals(that.helper.function)
+                && this.helper.procedure.equals(that.helper.procedure);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/TransposedFunction.java b/core/src/main/java/org/apache/commons/functor/core/composite/TransposedFunction.java
index 259ed80..0b311a2 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/TransposedFunction.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/TransposedFunction.java
@@ -78,18 +78,15 @@
      * {@inheritDoc}
      */
     @Override
-    public final boolean equals(Object that) {
-        return that == this || (that instanceof TransposedFunction<?, ?, ?>
-                                    && equals((TransposedFunction<?, ?, ?>) that));
-    }
-
-    /**
-     * Learn whether another TransposedFunction is equal to this.
-     * @param that TransposedFunction to test
-     * @return boolean
-     */
-    public final boolean equals(TransposedFunction<?, ?, ?> that) {
-        return null != that && function.equals(that.function);
+    public final boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof TransposedFunction<?, ?, ?>)) {
+            return false;
+        }
+        TransposedFunction<?, ?, ?> that = (TransposedFunction<?, ?, ?>) obj;
+        return this.function.equals(that.function);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/TransposedPredicate.java b/core/src/main/java/org/apache/commons/functor/core/composite/TransposedPredicate.java
index 02ec347..a6e2ecb 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/TransposedPredicate.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/TransposedPredicate.java
@@ -76,17 +76,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof TransposedPredicate<?, ?> && equals((TransposedPredicate<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another TransposedPredicate is equal to this.
-     * @param that the TransposedPredicate to test
-     * @return boolean
-     */
-    public boolean equals(TransposedPredicate<?, ?> that) {
-        return null != that && predicate.equals(that.predicate);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof TransposedPredicate<?, ?>)) {
+            return false;
+        }
+        TransposedPredicate<?, ?> that = (TransposedPredicate<?, ?>) obj;
+        return this.predicate.equals(that.predicate);
     }
 
     /**
diff --git a/core/src/main/java/org/apache/commons/functor/core/composite/TransposedProcedure.java b/core/src/main/java/org/apache/commons/functor/core/composite/TransposedProcedure.java
index 70a4b66..027262a 100644
--- a/core/src/main/java/org/apache/commons/functor/core/composite/TransposedProcedure.java
+++ b/core/src/main/java/org/apache/commons/functor/core/composite/TransposedProcedure.java
@@ -76,17 +76,15 @@
      * {@inheritDoc}
      */
     @Override
-    public boolean equals(Object that) {
-        return that == this || (that instanceof TransposedProcedure<?, ?> && equals((TransposedProcedure<?, ?>) that));
-    }
-
-    /**
-     * Learn whether another TransposedProcedure is equal to this.
-     * @param that TransposedPredicate to test
-     * @return boolean
-     */
-    public boolean equals(TransposedProcedure<?, ?> that) {
-        return null != that && procedure.equals(that.procedure);
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof TransposedProcedure<?, ?>)) {
+            return false;
+        }
+        TransposedProcedure<?, ?> that = (TransposedProcedure<?, ?>) obj;
+        return this.procedure.equals(that.procedure);
     }
 
     /**