/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.commons.lang; /** @author andrew00x */ public final class Pair<A, B> { public static <K, V> Pair<K, V> of(K k, V v) { return new Pair<>(k, v); } public final A first; public final B second; private final int hashCode; public Pair(A first, B second) { this.first = first; this.second = second; int hashCode = 7; hashCode = hashCode * 31 + (first == null ? 0 : first.hashCode()); hashCode = hashCode * 31 + (second == null ? 0 : second.hashCode()); this.hashCode = hashCode; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Pair<?, ?>)) { return false; } final Pair other = (Pair)o; return (first == null ? other.first == null : first.equals(other.first)) && (second == null ? other.second == null : second.equals(other.second)); } @Override public int hashCode() { return hashCode; } @Override public String toString() { return "{first=" + first + ", second=" + second + '}'; } }