/*
* Copyright 2007 - 2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sf.jailer.util;
/**
* An ordered pair of objects (a, b).
*
* (a1, b1).equals(a2, b2)
* iff
* (a1 == null && a2 == null || a1.equals(a2))
* &&
* (b1 == null && b2 == null || b1.equals(b2))
*
* @author Ralf Wisser
*/
public class Pair<A, B> {
/**
* The <b>a</b> object.
*/
public final A a;
/**
* The <b>b</b> object.
*/
public final B b;
/**
* New Pair (a, b).
*
* @param a the <b>a</b> object
* @param b the <b>b</b> object
*/
public Pair(A a, B b) {
this.a = a;
this.b = b;
}
/**
* Compares two pairs.
*/
@Override
public boolean equals(Object other) {
if (other instanceof Pair) {
Pair<?, ?> otherPair = (Pair<?, ?>) other;
if (a == null && otherPair.a != null) {
return false;
}
if (a != null) {
if (otherPair.a == null) {
return false;
}
if (!a.equals(otherPair.a)) {
return false;
}
}
if (b == null && otherPair.b != null) {
return false;
}
if (b != null) {
if (otherPair.b == null) {
return false;
}
if (!b.equals(otherPair.b)) {
return false;
}
}
return true;
}
return false;
}
/**
* Hashes a pair.
*/
@Override
public int hashCode() {
return (a == null? 0 : a.hashCode()) + 3 * (b == null? 0 : b.hashCode());
}
/**
* Gets string representation of an pair.
*/
@Override
public String toString() {
return "Pair(" + a + ", " + b + ")";
}
}