/* * This file is part of JGAP. * * JGAP offers a dual license model containing the LGPL as well as the MPL. * * For licensing information please see the file license.txt included with JGAP * or have a look at the top of class org.jgap.Chromosome which representatively * includes the JGAP license policy applicable for any file delivered with JGAP. */ package org.jgap.audit; import java.io.*; import org.jgap.util.*; /** * A (key, value) tupel. * * @author Klaus Meffert * @since 2.3 */ public class KeyedValue implements ICloneable, Serializable { /** String containing the CVS revision. Read out via reflection!*/ private static final String CVS_REVISION = "$Revision: 1.5 $"; private Comparable m_key; private Number m_value; /** * Creates a new (key, value) tupel. * * @param a_key the key * @param a_value the value, could be null * * @author Klaus Meffert * @since 2.3 */ public KeyedValue(final Comparable a_key, final Number a_value) { m_key = a_key; m_value = a_value; } /** * @return key of the tupel * * @author Klaus Meffert * @since 2.3 */ public Comparable getKey() { return m_key; } /** * @return value of the tupel * * @author Klaus Meffert * @since 2.3 */ public synchronized Number getValue() { return m_value; } /** * Sets the value for the key * * @param a_value the value to set for the key * * @author Klaus Meffert * @since 2.3 */ public synchronized void setValue(final Number a_value) { m_value = a_value; } /** * Tests if this object is equal to another. * * @param a_object the other object * * @return true: this object is equal to other one * * @author Klaus Meffert * @since 2.3 */ public boolean equals(final Object a_object) { if (this == a_object) { return true; } if (! (a_object instanceof KeyedValue)) { return false; } final KeyedValue defaultKeyedValue = (KeyedValue) a_object; if (m_key != null ? !m_key.equals(defaultKeyedValue.m_key) : defaultKeyedValue.m_key != null) { return false; } if (m_value != null ? !m_value.equals(defaultKeyedValue.m_value) : defaultKeyedValue.m_value != null) { return false; } return true; } /** * @return hash code of the instance * * @author Klaus Meffert * @since 2.3 */ public int hashCode() { int result; if (m_key == null) { result = -37; } else { result = m_key.hashCode(); } result = 41 * result; if (m_value == null) { result += -3; } else { result += m_value.hashCode(); } return result; } /** * @return clone of the current instance * * @author Klaus Meffert * @since 2.3 */ public Object clone() { try { KeyedValue clone = (KeyedValue)super.clone(); return clone; } catch (CloneNotSupportedException cex) { throw new CloneException(cex); } } }