immutable : Java Glossary

*0-9ABCDEFGHIJKLMNOPQRSTUVWXYZ (all)

immutable

Not changeable. All Java variables are by default mutable. An Object is immutable if there is no way you can change its fields after it has been constructed. Tools for creating making objects of a class immutable:

An object can be immutable even if some of its primitive fields are not. There must be no public fields and no public methods that let you change fields. The simplest tool to ensure immutability is to use the keyword final on all of the fields and initialise them all in the constructor. You must also ensure that any objects your immutable object points are in turn immutable. Normally you would declare references to all such objects final.

Advantages of Immutability

Returning an Immutable Result

Let us say you wanted to return some data from your method, but you did not want the user to muck with the original. Here are six approaches to the problem:

  1. Wrap the reference in an immutable wrapper class and return that.
  2. Give the caller his own private copy of the data he can muck with to his heart’s content. There is high CPU (Central Processing Unit) and RAM overhead in the array copying.
  3. Beg or threaten the user not to modify the data in the reference you return to him.
  4. Return an immutable interface to the original data. You can then change fields in the object, but the caller cannot unless he cheats by casting. You expose only the methods you want the user to have. Doing the same with classes is trickier since a subclass must expose everything its superclass does.
  5. You can turn a Collection into an immutable Collection with methods like  Collections.unmodifiableCollection, Collections. unmodifiableList, Collections.unmodifiableMap, Collections. unmodifiableSet, Collections. unmodifiableSortedMap or Collections. unmodifiableSortedSet.
  6. You can return an Iterator with a dummy remove method.

Of course, same techniques can be used if you want to pass an Object to a method and you don’t want the method messing with it. You declare the method with an interface parameter and pass it an interface referenece or a reference to an object of some class implementing that interface. Essay on double vs Double.


This page is posted
on the web at:

http://mindprod.com/jgloss/immutable.html

Optional Replicator mirror
of mindprod.com
on local hard disk J:

J:\mindprod\jgloss\immutable.html
Canadian Mind Products
Please the feedback from other visitors, or your own feedback about the site.
Contact Roedy. Please feel free to link to this page without explicit permission.

IP:[65.110.21.43]
Your face IP:[18.97.14.84]
You are visitor number