Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #11022

Re: Inner class and interface question (I posted some really long code)

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)

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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