001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.lang3; 018 019 import java.io.Serializable; 020 021 import org.apache.commons.lang3.builder.HashCodeBuilder; 022 023 /** 024 * A basic immutable Object pair. 025 * 026 * <p>#ThreadSafe# if the objects are threadsafe</p> 027 * @since Lang 3.0 028 * @author Matt Benson 029 * @version $Id: Pair.java 967237 2010-07-23 20:08:57Z mbenson $ 030 */ 031 public final class Pair<L, R> implements Serializable { 032 /** Serialization version */ 033 private static final long serialVersionUID = 4954918890077093841L; 034 035 /** Left object */ 036 public final L left; 037 038 /** Right object */ 039 public final R right; 040 041 /** 042 * Create a new Pair instance. 043 * @param left 044 * @param right 045 */ 046 public Pair(L left, R right) { 047 this.left = left; 048 this.right = right; 049 } 050 051 /** 052 * {@inheritDoc} 053 */ 054 @Override 055 public boolean equals(Object obj) { 056 if (obj == this) { 057 return true; 058 } 059 if (obj instanceof Pair<?, ?> == false) { 060 return false; 061 } 062 Pair<?, ?> other = (Pair<?, ?>) obj; 063 return ObjectUtils.equals(left, other.left) && ObjectUtils.equals(right, other.right); 064 } 065 066 /** 067 * {@inheritDoc} 068 */ 069 @Override 070 public int hashCode() { 071 return new HashCodeBuilder().append(left).append(right).toHashCode(); 072 } 073 074 /** 075 * Returns a String representation of the Pair in the form: (L,R) 076 */ 077 @Override 078 public String toString() { 079 StringBuilder builder = new StringBuilder(); 080 builder.append("("); 081 builder.append(left); 082 builder.append(","); 083 builder.append(right); 084 builder.append(")"); 085 return builder.toString(); 086 } 087 088 /** 089 * Static creation method for a Pair<L, R>. 090 * @param <L> 091 * @param <R> 092 * @param left 093 * @param right 094 * @return Pair<L, R>(left, right) 095 */ 096 public static <L, R> Pair<L, R> of(L left, R right) { 097 return new Pair<L, R>(left, right); 098 } 099 }