Java Reference
In-Depth Information
EXAMPLE: (continued)
Note that the method censor has one regular parameter followed by a specification
for any number of additional string parameters. In this case, all parameters are of type
String . However, that first regular parameter (or parameters) in a method heading can
be of any type (or types); they need not match the type of the vararg specification. We
just happen to want the type String here.
Because the first parameter is of type String and the vararg specification in this case
says the remaining arguments are of type String , you might wonder why we did not
omit the first String parameter sentence , have only a vararg specification, and then use
unwanted[0] to serve the same role as sentence . If we had done so, then the method
censor could be called with no arguments at all. A vararg specification allows any num-
ber of arguments, including the possibility of zero arguments. However, we wanted to
insist that the method censor have at least one argument, and the parameter sentence
ensures that censor will always have at least one argument.
Privacy Leaks with Array Instance Variables
In Chapter 5, we explained why it is a compromise of privacy for a class to have an
accessor (or other method) that returns a reference to a private mutable object. As we
noted there, an accessor method should instead return a reference to a deep copy of the
private object. (See the Pitfall subsection of Chapter 5 entitled “Privacy Leaks.”) At
the time, we had in mind returning the contents of a private instance variable of a
class type. However, the lesson applies equally well to private instance variables of an
array type.
For example, suppose that you decide that you want an accessor method for the
array instance variable in the class PartiallyFilledArray in Display 6.5. You might
be tempted to define the accessor method as follows:
public double [] getInsideArray() // Problematic version
{
return a;
}
As indicated in the comment, this definition has a problem. The problem is that this
accessor method allows a programmer to change the array object named by the private
instance variable a in ways that bypass the checks built into the mutator methods of
the class PartiallyFilledArray . To see why this is true suppose we had added this defi-
nition of the method getInsideArray to the class PartiallyFilledArray , and consider
the following code:
PartiallyFilledArray leakyArray =
new PartiallyFilledArray(10);
double [] arrayName = leakyArray.getInsideArray();
Search WWH ::




Custom Search