Add ObjectReference interface and two implementations
-----------------------------------------------------

                 Key: LANG-577
                 URL: https://issues.apache.org/jira/browse/LANG-577
             Project: Commons Lang
          Issue Type: New Feature
          Components: lang.*
            Reporter: Joerg Schaible
            Assignee: Joerg Schaible
            Priority: Minor
             Fix For: 3.0


In some situations it would be helpful to use a reference to an object, e.g. 
for parameters by reference

{code:java}
void doSomething(ObjectReference<String> ref) {
    ref.set("Hello");
}
{code}

or for anonymous methods

{code:java}
final ObjectReference<String> ref = new MemoryReference<String>();
final Runnable r = new Runnable() {
    void run() {
        ref.set("Hello");
    }
}
r.run();
{code}

Additionally it is sometimes useful to keep the reference in other places than 
in shared memory, e.g. in a ThreadLocal or in case of a web application in a 
scoped reference or even in combination with some other persistence mechanism. 
Basically I am proposing the interface ObjectReference:

{code:Java}
/**
 * Interface to reference an object.
 * 
 * @param <T> the type of the referenced object
 * @author Apache Software Foundation
 * @since 3.0
 */
public interface ObjectReference<T> {
    /**
     * Getter for the referenced object.
     * 
     * @return the object or <code>null</code>
     */
    T get();

    /**
     * Setter for the reference.
     * 
     * @param object the object to reference (may be <code>null</code>)
     */
    void set(T object);
}
{code}

and the two implementations MemoryReference and ThreadLocalReference in the new 
package org.apache.commons.lang3.reference. I've seen such or similar types in 
various libraries.

Comments?

Unit test will be provided also.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to