Add MutableObject

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@137874 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Stephen Colebourne 2004-07-08 00:02:35 +00:00
parent fbeb9d58da
commit 3787473c50
3 changed files with 212 additions and 1 deletions

View File

@ -0,0 +1,106 @@
/*
* Copyright 2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.lang.mutable;
import java.io.Serializable;
/**
* A mutable <code>Object</code>.
*
* @since 2.1
* @version $Id: MutableObject.java,v 1.1 2004/07/08 00:02:35 scolebourne Exp $
*/
public class MutableObject
implements Mutable, Serializable {
/** Serialization lock. */
private static final long serialVersionUID = 86241875189L;
/** The mutable value. */
private Object value;
/**
* Constructs a new MutableObject with the default value of null.
*/
public MutableObject() {
super();
}
/**
* Constructs a new MutableObject with the specified value.
*
* @param value a value.
*/
public MutableObject(Object value) {
super();
this.value = value;
}
//-----------------------------------------------------------------------
/**
* Gets the value.
*
* @return the value
*/
public Object getValue() {
return this.value;
}
/**
* Sets the value.
*
* @param value the value to set
*/
public void setValue(Object value) {
this.value = value;;
}
//-----------------------------------------------------------------------
/**
* Checks if this object equals the specified object.
* <p>
* The object must be a MutableObject with an equal value to be equal.
*
* @param obj the object to compare to
* @return true if equal
*/
public boolean equals(Object obj) {
if (obj instanceof MutableObject) {
Object other = ((MutableObject) obj).value;
return (value == other || (value != null && value.equals(other)));
}
return false;
}
/**
* Returns a suitable hashcode for this mutable.
*
* @return a suitable hashcode
*/
public int hashCode() {
return (value == null ? 0 : value.hashCode());
}
/**
* Returns the String value of this mutable.
*
* @return the mutable value as a string
*/
public String toString() {
return (value == null ? "null" : value.toString());
}
}

View File

@ -0,0 +1,104 @@
/*
* Copyright 2002-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.lang.mutable;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
/**
* JUnit tests.
*
* @version $Id: MutableObjectTest.java,v 1.1 2004/07/08 00:02:35 scolebourne Exp $
* @see MutableShort
*/
public class MutableObjectTest extends TestCase {
public MutableObjectTest(String testName) {
super(testName);
}
public static void main(String[] args) {
TestRunner.run(suite());
}
public static Test suite() {
return new TestSuite(MutableObjectTest.class);
}
// ----------------------------------------------------------------
public void testConstructors() {
assertEquals(null, new MutableObject().getValue());
Integer i = new Integer(6);
assertSame(i, new MutableObject(i).getValue());
assertSame("HI", new MutableObject("HI").getValue());
assertSame(null, new MutableObject(null).getValue());
}
public void testGetSet() {
final MutableObject mutNum = new MutableObject();
assertEquals(null, new MutableObject().getValue());
mutNum.setValue("HELLO");
assertSame("HELLO", mutNum.getValue());
mutNum.setValue(null);
assertSame(null, mutNum.getValue());
}
public void testEquals() {
final MutableObject mutNumA = new MutableObject("ALPHA");
final MutableObject mutNumB = new MutableObject("ALPHA");
final MutableObject mutNumC = new MutableObject("BETA");
final MutableObject mutNumD = new MutableObject(null);
assertEquals(true, mutNumA.equals(mutNumA));
assertEquals(true, mutNumA.equals(mutNumB));
assertEquals(true, mutNumB.equals(mutNumA));
assertEquals(true, mutNumB.equals(mutNumB));
assertEquals(false, mutNumA.equals(mutNumC));
assertEquals(false, mutNumB.equals(mutNumC));
assertEquals(true, mutNumC.equals(mutNumC));
assertEquals(false, mutNumA.equals(mutNumD));
assertEquals(true, mutNumD.equals(mutNumD));
assertEquals(false, mutNumA.equals(null));
assertEquals(false, mutNumA.equals(new Object()));
assertEquals(false, mutNumA.equals("0"));
}
public void testHashCode() {
final MutableObject mutNumA = new MutableObject("ALPHA");
final MutableObject mutNumB = new MutableObject("ALPHA");
final MutableObject mutNumC = new MutableObject("BETA");
final MutableObject mutNumD = new MutableObject(null);
assertEquals(true, mutNumA.hashCode() == mutNumA.hashCode());
assertEquals(true, mutNumA.hashCode() == mutNumB.hashCode());
assertEquals(false, mutNumA.hashCode() == mutNumC.hashCode());
assertEquals(false, mutNumA.hashCode() == mutNumD.hashCode());
assertEquals(true, mutNumA.hashCode() == "ALPHA".hashCode());
assertEquals(0, mutNumD.hashCode());
}
public void testToString() {
assertEquals("HI", new MutableObject("HI").toString());
assertEquals("10.0", new MutableObject(new Double(10)).toString());
}
}

View File

@ -22,7 +22,7 @@ import junit.textui.TestRunner;
/**
* JUnit tests.
*
* @version $Id: MutableTestSuite.java,v 1.3 2004/07/07 23:50:28 scolebourne Exp $
* @version $Id: MutableTestSuite.java,v 1.4 2004/07/08 00:02:35 scolebourne Exp $
*/
public class MutableTestSuite {
@ -39,6 +39,7 @@ public class MutableTestSuite {
suite.addTest(MutableLongTest.suite());
suite.addTest(MutableFloatTest.suite());
suite.addTest(MutableDoubleTest.suite());
suite.addTest(MutableObjectTest.suite());
return suite;
}