Triple implements Serializable { @Override public boolean equals(@Nullable final Object obj) { boolean eq; if (this == obj) { eq = true; } else if ((obj != null) && (obj instanceof Triple)) { @SuppressWarnings("unchecked") final Triple<T1, T2, T3> that = (Triple<T1, T2, T3>) obj; eq = that.canEqual(this); eq = eq && Objects.equal(value1, that.value1); eq = eq && Objects.equal(value2, that.value2); eq = eq && Objects.equal(value3, that.value3); } else { eq = false; } return eq; } Triple(@Nonnull final T1 value1, @Nonnull final T2 value2, @Nonnull final T3 value3); @SuppressWarnings("ConstantConditions") @Deprecated private  Triple(); @Nonnull static Triple<T1, T2, T3> create(@Nonnull final T1 value1,
                                                         @Nonnull final T2 value2, @Nonnull final T3 value3); @Nonnull T1 getValue1(); @Nonnull T2 getValue2(); @Nonnull T3 getValue3(); boolean canEqual(@Nonnull final Object obj); @Override boolean equals(@Nullable final Object obj); @Override int hashCode(); @Nonnull @Override String toString();  }
@Test public void testEquals() { LOG.info("testEquals"); final Triple<Double, String, Boolean> s = Triple.create(x1, x2, x3); final Triple<Double, String, Boolean> t = Triple.create(y1, y2, y3); Assert.assertEquals(s, x); Assert.assertEquals(t, y); Assert.assertFalse(x.equals(t)); Assert.assertFalse(y.equals(s)); }