001/** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019package org.apache.oozie.util; 020 021import org.apache.commons.lang.ObjectUtils; 022 023/** 024 * Utility class for holding a pair of data 025 * @param <T> type of first data 026 * @param <S> type of second data 027 */ 028public class Pair<T, S> { 029 private T first; 030 private S second; 031 032 public Pair(T first, S second) { 033 this.first = first; 034 this.second = second; 035 } 036 037 038 public static <T, S> Pair<T, S> of(T first, S second) { 039 return new Pair<T,S>(first, second); 040 } 041 042 public T getFirst() { 043 return first; 044 } 045 046 public S getSecond() { 047 return second; 048 } 049 050 public int hashCode() 051 { 052 return (first == null ? 1 : first.hashCode()) * 17 + (second == null ? 1 : second.hashCode()) * 19; 053 } 054 055 public boolean equals(Object other) 056 { 057 if (other == null) { 058 return false; 059 } 060 061 if (!(other instanceof Pair)) { 062 return false; 063 } 064 065 Pair<T, S> otherPair = (Pair<T,S>)other; 066 return (ObjectUtils.equals(first, otherPair.first) && ObjectUtils.equals(second, otherPair.second)); 067 } 068} 069