001 /* 002 * Copyright 2009 Red Hat, Inc. 003 * Red Hat licenses this file to you under the Apache License, version 004 * 2.0 (the "License"); you may not use this file except in compliance 005 * with the License. You may obtain a copy of the License at 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * Unless required by applicable law or agreed to in writing, software 008 * distributed under the License is distributed on an "AS IS" BASIS, 009 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 010 * implied. See the License for the specific language governing 011 * permissions and limitations under the License. 012 */ 013 014 package org.hornetq.api.core; 015 016 import java.io.Serializable; 017 018 /** 019 * 020 * A Pair is a holder for 2 objects. 021 * 022 * @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a> 023 * 024 */ 025 public class Pair<A, B> implements Serializable 026 { 027 private static final long serialVersionUID = -2496357457812368127L; 028 029 public Pair(final A a, final B b) 030 { 031 this.a = a; 032 033 this.b = b; 034 } 035 036 private A a; 037 038 private B b; 039 040 private int hash = -1; 041 042 @Override 043 public int hashCode() 044 { 045 if (hash == -1) 046 { 047 if (a == null && b == null) 048 { 049 return super.hashCode(); 050 } 051 else 052 { 053 hash = (a == null ? 0 : a.hashCode()) + 37 * (b == null ? 0 : b.hashCode()); 054 } 055 } 056 057 return hash; 058 } 059 060 @Override 061 public boolean equals(final Object other) 062 { 063 if (other == this) 064 { 065 return true; 066 } 067 068 if (other instanceof Pair == false) 069 { 070 return false; 071 } 072 073 Pair<A, B> pother = (Pair<A, B>)other; 074 075 return (pother.a == null ? a == null : pother.a.equals(a)) && (pother.b == null ? b == null : pother.b.equals(b)); 076 077 } 078 079 @Override 080 public String toString() 081 { 082 return "Pair[a=" + a + ", b=" + b + "]"; 083 } 084 085 public void setA(A a) 086 { 087 hash = -1; 088 this.a = a; 089 } 090 091 public A getA() 092 { 093 return a; 094 } 095 096 public void setB(B b) 097 { 098 hash = -1; 099 this.b = b; 100 } 101 102 public B getB() 103 { 104 return b; 105 } 106 }