Java Reference
In-Depth Information
SOLUTION 26.2
The call to notify() in the pop() method will wake up a thread that was waiting for
the stack to make some room. The awakened thread must then wait to obtain the monitor.
Because the pop() method is synchronized , it holds the monitor until the method
completes.
SOLUTION 26.3
The problems in the model are as follows.
The Rocket class can't extend two classes.
The Rocket.clone() method can't have the same signature as and a different
return type from the method it overrides.
The Rocket.clone() method can't reduce visibility from protected to
private .
The Rocket.clone() method can't throw an extra exception. You could cure this
problem
if
you
made RocketCloneException
an
extension
of
CloneNotSupportedException .
SOLUTION 26.4
Questionable aspects of the model follow.
The FireworkCollection class is useful as a collection that contains only
a certain type of object. However, such a collection is either a list or a set, and it
should be named accordingly.
The FireworkCollection class stores Firework objects in a set instead of a list.
This makes it difficult to imagine what a call to, say, get(0) will return.
The FireworkCollection class has an iterator() function, which is good, but
it returns Iterator , which is questionable. The returned iterator will have a next()
method that returns an Object that the caller will have to cast to Firework . This
defeats the idea of having a separate collection class for fireworks.
The fireworks hierarchy comprehends the fact that a firework's type does not always
indicate whether the firework will explode.
For example, rockets may or may not explode, although firecrackers always explode
and sparklers never do. The setExplodes() method allows flexibility in modeling
firework types but also allows setting a Sparkler object to be an exploding type of
firework. You should avoid this type of modeling error. In this case, it might work to
create an ExplodingFirework subclass of Firework .
The setExplodes() method of Firecracker throws
an IllegalArgumentException if the argument is false, as all firecrackers
explode. It is inconsistent to have this method throw an exception without extending
this thought to Sparkler , whose instances should never explode.
Search WWH ::




Custom Search