package com.github.davidmoten.rx.jdbc.tuple;
/**
* An explicitly typed tuple.
*
* @param <T1>
* @param <T2>
*/
public class Tuple2<T1, T2> {
private final T1 value1;
private final T2 value2;
/**
* Constructor.
*
* @param value1
* @param value2
*/
public Tuple2(T1 value1, T2 value2) {
this.value1 = value1;
this.value2 = value2;
}
/**
* Returns a new instance.
*
* @param r
* @param s
* @return
*/
public static <R, S> Tuple2<R, S> create(R r, S s) {
return new Tuple2<R, S>(r, s);
}
/**
* Returns the first member of the tuple.
*
* @return
*/
public T1 value1() {
return value1;
}
/**
* Returns the first member of the tuple.
*
* @return
*/
public T1 _1() {
return value1;
}
/**
* Returns the 2nd member of the tuple.
*
* @return
*/
public T2 value2() {
return value2;
}
/**
* Returns the 2nd member of the tuple.
*
* @return
*/
public T2 _2() {
return value2;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((value1 == null) ? 0 : value1.hashCode());
result = prime * result + ((value2 == null) ? 0 : value2.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Tuple2<?, ?> other = (Tuple2<?, ?>) obj;
if (value1 == null) {
if (other.value1 != null)
return false;
} else if (!value1.equals(other.value1))
return false;
if (value2 == null) {
if (other.value2 != null)
return false;
} else if (!value2.equals(other.value2))
return false;
return true;
}
@Override
public String toString() {
return "Tuple2 [value1=" + value1 + ", value2=" + value2 + "]";
}
}