### Question:
ConditionalBinaryFunction implements BinaryFunction<L, R, T> { @Override 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); } ConditionalBinaryFunction(BinaryPredicate<? super L, ? super R> ifPred,
            BinaryFunction<? super L, ? super R, ? extends T> thenFunc,
            BinaryFunction<? super L, ? super R, ? extends T> elseFunc); T evaluate(L left, R right); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testEquals() throws Exception { ConditionalBinaryFunction<Boolean, Object, String> f = new ConditionalBinaryFunction<Boolean, Object, String>( LeftIdentity.PREDICATE, Constant.of("left"), Constant.of("right")); assertEquals(f,f); assertObjectsAreEqual(f,new ConditionalBinaryFunction<Boolean, Object, String>( LeftIdentity.PREDICATE, Constant.of("left"), Constant.of("right"))); assertObjectsAreNotEqual(f,new ConditionalBinaryFunction<Boolean, Object, Object>( LeftIdentity.PREDICATE, Constant.of(null), Constant.of("right"))); assertObjectsAreNotEqual(f,new ConditionalBinaryFunction<Boolean, Object, String>( Constant.TRUE, Constant.of("left"), Constant.of("right"))); assertObjectsAreNotEqual(f,new ConditionalBinaryFunction<Boolean, Object, Object>( LeftIdentity.PREDICATE, Constant.of("left"), Constant.of(null))); assertTrue(!f.equals(null)); }