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
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
- Communicate via a static or instance variable visible to both caller and
- Use a delegate object. The callee
calls its methods to save the results for the caller.