Java Reference
In-Depth Information
Self-Test Exercises
1. What output is produced by the following code?
LinkedList1 list =
new
LinkedList1( );
list.addToStart("apple pie", 1);
list.addToStart("hot dogs", 12);
list.addToStart("mustard", 1);
list.outputList( );
2. Defi ne a
boolean
valued method named
is Empty
that can be added to the
class
LinkedList1
( Display 15.3 ). The method returns
true
if the list is empty
and
false
if the list has at least one node in it.
3 . D e fi ne a
void
method named
clear
that can be added to the class
LinkedList1
(Display 15.3). The method has no parameters and it empties the list.
PITFALL: Privacy Leaks
It may help you to understand this section if you first review the Pitfall section of the
same name in Chapter 5 .
Consider the method
getLink
in the class
Node1
( Display 15.2 ). It returns a value
of type
Node1
. That is, it returns a reference to a
Node1
. In Chapter 5 , we said that if
a method (such as
getLink
) returns a reference to an instance variable of a (mutable)
class type, then the
private
restriction on the instance variable can easily be defeated
because getting a reference to an object may allow a programmer to change the pri-
vate instance variables of the object. There are a number of ways to fi x this, the most
straightforward of which is to make the class
Node1
a private inner class in the method
Node1
, as discussed in the next subsection.
There is no danger of a privacy leak with the class
Node1
when it is used in the
class defi nition for
LinkedList1
. However, there is no way to guarantee that the class
Node1
will be used only in this way unless you take some precaution, such as making
the class
Node1
a private inner class in the class
LinkedList1 Node1
.
An alternate solution is to place both of the classes
Node1
and
LinkedList1
into a
package, and change the
private
instance variable restriction to the
package
restric-
tion as discussed in Chapter 7 .
Note that this privacy problem can arise in any situation in which a method returns
a reference to a private instance variable of a class type. The method
getItem( )
of the
class
Node1
comes very close to having this problem. In this case, the method
getItem
causes no privacy leak, but only because the class
String
is not a mutable class (that
is, it has no methods that will allow the user to change the value of the string without
changing the reference). If instead of storing data of type
String
in our list we had
stored data of some mutable class type, then defi ning an accessor method similarly to
getItem
would produce a privacy leak.
■