AlternativesToPassByReference

Last edit September 1, 2005
JavaPassesByValue. The idioms for doing PassByReference in Java are:

However, these smell bad.

Therefore: Look for alternatives that smell better:

  • If you are using reference parameters to return multiple values, then UseObjectsToReturnMultipleValues instead. But, if the multiple values share behavior, then create a first-class object for them, not just a dumb data object.
  • If your function is modifying a single value, then ReturnModifiedParameter instead.

Sometimes neither of those approaches work. Specifically, a complex public method may require multiple private methods and multiple local variables, and some of the private methods may update multiple local variables. That situation requires an ObjectContainingLocalVariables, which I create at the start of the public method and pass to each private method. ObjectContainingLocalVariables is a last resort, which I use when it's the only alternative to a LongMethod.


Learn FunctionalProgramming: Learn how to program entirely without SideEffects, then go back to Java and use SideEffects only when they make your program cleaner and easier to understand. You'll find that your style has changed quite a bit. But I've been trying for quite a few years to explain how it changes, and haven't figured out how to explain it yet. -- RalphJohnson

The book LittleJavaFewPatterns (A Little Java, A Few Patterns) is a nice step along the way. I'm only half way through it, but it is definitely worthwhile if you are interested in seeing things from another point of view.

One other way to get a smattering of the ideas of FunctionalProgramming is to read this little tutorial for the HaskellLanguage: http://www.haskell.org/tutorial/

Also, the book Functional Programming Practice and Theory by Bruce MacLennan ISBN 0201137445 is extremely good. I found that one in the library at my local university. -- MichaelFeathers


CategoryJava JavaIdiom