import java.util.Objects; import be.kuleuven.cs.som.annotate.*; /** * A tuple (pair) implementation * * @param first element type * @param second element type * * * @version 1.0 * @author Arthur Bols & Leen Dereu */ @Value public class Tuple { public final T1 item1; public final T2 item2; /** * * @param item1 * The first element for this tuple * @param item2 * The second element for this tuple */ private Tuple(T1 item1, T2 item2) { if (item1 == null) throw new IllegalArgumentException("item1 may not be null"); if (item2 == null) throw new IllegalArgumentException("item2 may not be null"); this.item1 = item1; this.item2 = item2; } @Immutable public static Tuple create(T1 item1, T2 item2){ return new Tuple<>(item1, item2); } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Tuple)) return false; Tuple tuple = (Tuple) o; return Objects.equals(item1, tuple.item1) && Objects.equals(item2, tuple.item2); } @Override public int hashCode() { return Objects.hash(item1, item2); } }