call by reference : Java Glossary
- call by reference
When you call a method by reference, the callee sees the caller’s original variables passed as parameters,
not copies. References to the callee’s objects are treated the same way. Thus any changes the callee makes
to the caller’s variables affect the caller’s original variables. Java never uses call by
reference. Java always uses call by value.
How do you fake call by reference in Java, or more precisely, how can a
callee influence the values of it’s caller’s variables?
Dale King points out that attempts to fake call by reference are usually a
sign of poor object-oriented design. A function should not be trying to return more than one thing. He
uses the term thing because it is proper to return more than one value (e.g. returning a Point that
contains two values). If you are trying to return two values, the test he like to apply is whether you can come
up with a logical name for the values as a group. If you can’t, you had better look to see if maybe you
what you have is really two functions lumped together.
- Use a holder/wrapper object passed to the callee as a parameter. The callee can change the object’s
fields. That object may be as simple as an Object. In Java, a callee may change
the fields of a caller’s object passed as a parameter, but not the caller’s reference to that
object. It can’t make the caller’s variable passed as a parameter point to a different object. It
can only make its local copy point to a different object. A holder class is just a class with fields to hold
your values. It has no methods other than accessors for the fields.
- Have the callee return the new values, perhaps wrapped in an holder class or Object, and have the caller store them away somewhere.
- Communicate via a static or instance variable visible to both caller and callee.
- Use a delegate object. The callee calls its methods to save the results for the