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    }