[ 
https://issues.apache.org/jira/browse/LANG-577?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12794452#action_12794452
 ] 

Joerg Schaible commented on LANG-577:
-------------------------------------

They are not really related. The stuff in java.lang.ref is used more or less to 
interact with the garbage collector and has very specialized functionality to 
deal with the lifecycle of objects that are no longer referenced by an 
application. The proposal here describes a way to share an object within some 
kind of scope scope using an explicit reference with very simple functionality.

> 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
>
>         Attachments: reference.diff
>
>
> 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