Re: Inner class and interface question (I posted some really long
code)
On 12/27/2011 10:29 PM, Chad wrote:
I'm want to put the getHead() method in the BagInterface. However, I
can't do this because the compiler keeps saying it can't find 'class
Node' in Location BagInterface<T>. I guess this is because Node is an
inner class of my LinkedList class. Ideas how to fix this? Ideally I
want to preserve the inner class. Below is the complete working code
in question.
If you really, really want to do this, refer to "Node" as
"LinkedList<T>.Node" in the interface declaration. You may also need to
make the inner class Node public - not needed when it is all in one
source file or package. Also, to make it any use you would have to give
Node a public getData method or similar.
However, I agree with Daniel Pitts's comments on the undesirability of
this change. A bag does not have a head. Node should be private to the
LinkedList implementation, free to change if the implementation changes.
An interface should not depend on the implementation of any one of its
implementing classes - think about writing a different implementation of
BagInterface, based for example on java.util.IdentityHashMap<T,T>. Do
you really want it to have to construct a LinkedList<T> instance so that
it can create LinkedList<T>.Node instances?
Any methods in BagInterface<T> that return elements of the bag could
return type T.
If you want a way to visit the data in the bag, consider making
BagInterface<T> extend Iterable<T> so that its implementations would
have to provide a "public Iterator<T> iterator()" method. If you do
that, visiting code for BagInterface<String> someBag would be:
for(String s : someBag){
....
}
Your printMe becomes:
public void printMe() {
for(T data : this) {
System.out.println(data);
}
}
Patricia