package de.invesdwin.util.bean.tuple;
import javax.annotation.concurrent.Immutable;
import de.invesdwin.util.lang.Objects;
@SuppressWarnings("serial")
@Immutable
public class Quadruple<FIRST, SECOND, THIRD, FOURTH> extends Triple<FIRST, SECOND, THIRD> {
private final FOURTH fourth;
protected Quadruple(final FIRST first, final SECOND second, final THIRD third, final FOURTH fourth) {
super(first, second, third);
this.fourth = fourth;
}
public FOURTH getFourth() {
return fourth;
}
public static <FIRST, SECOND, THIRD, FOURTH> Quadruple<FIRST, SECOND, THIRD, FOURTH> of(final FIRST first,
final SECOND second, final THIRD third, final FOURTH fourth) {
return new Quadruple<FIRST, SECOND, THIRD, FOURTH>(first, second, third, fourth);
}
@Override
public int hashCode() {
return Objects.hashCode(getClass(), getFirst(), getSecond(), getThird(), getFourth());
}
@Override
public boolean equals(final Object obj) {
if (obj instanceof Quadruple) {
final Quadruple<?, ?, ?, ?> castObj = (Quadruple<?, ?, ?, ?>) obj;
return Objects.equals(getFirst(), castObj.getFirst()) && Objects.equals(getSecond(), castObj.getSecond())
&& Objects.equals(getThird(), castObj.getThird())
&& Objects.equals(getFourth(), castObj.getFourth());
} else {
return false;
}
}
}