Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #11022
| Date | 2011-12-28 09:53 -0800 |
|---|---|
| From | Patricia Shanahan <pats@acm.org> |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Inner class and interface question (I posted some really long code) |
| References | <e787d461-ab1a-417a-9c81-0caa4d1e7ac8@x34g2000prb.googlegroups.com> |
| Message-ID | <q4KdnTm5ju8NymbTnZ2dnUVZ_uudnZ2d@earthlink.com> (permalink) |
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
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Inner class and interface question (I posted some really long code) Chad <cdalten@gmail.com> - 2011-12-27 22:29 -0800
Re: Inner class and interface question (I posted some really long code) Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2011-12-27 23:27 -0800
Re: Inner class and interface question (I posted some really long code) Patricia Shanahan <pats@acm.org> - 2011-12-28 09:53 -0800
Re: Inner class and interface question (I posted some really long code) GGolf <invalid@invalid.com> - 2011-12-30 12:32 +0530
Re: Inner class and interface question (I posted some really long code) Patricia Shanahan <pats@acm.org> - 2011-12-30 05:40 -0800
Re: Inner class and interface question (I posted some really long code) Roedy Green <see_website@mindprod.com.invalid> - 2011-12-31 06:40 -0800
csiph-web