Win a copy of Soft Skills: The software developer's life manual this week in the Jobs Discussion forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Methods and Objects

 
Marc Kryzhan
Greenhorn
Posts: 14
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
public InventoryItemInterface getInventoryItem(String itemName);
I have the above script in an assignment.
Firstly, What does InventoryItemInterface represent here? My guess, An Object? Is getInventoryItem an instance of this Object?
The other methods I have are in this following format (which I understand):
public void deleteInventory(String itemName);
I do have an interface called InventoryItemInterface but no methods in it called getInventoryItem().
My second part of this query is what capabilities does getInventoryItem() have if it is an object of InventoryItemInterface? Does it have the capability of using the methods in InventoryItemInterface?

[ March 19, 2004: Message edited by: Marc Kryzhan ]
 
Stan James
(instanceof Sidekick)
Ranch Hand
Posts: 8791
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The line you had in bold declares a method. If it's in a class file, the method body will immediately follow this declaration. But with that semi-colon on the end, it looks like this line was found in an interface file.
Either way, the syntax of this declaration tells us
1) the method is public
2) the method will return an object of type InventoryItemInterface
3) the method requires an argument of type String
We would expect this method to create the object it's going to return or maybe find it in a cache or get it from some other object. The choices are endless, but let's take the simplest choice and create the new object on the spot.
Because we see Interface in the name of the return type, we can guess the return type is an interface and not a "concrete" class. That's a cool thing. The method promises to return an object that implements the interface, but doesn't tell you exactly what class that might be. This gives our method the freedom to create different objects depending on the itemName argument.
One confusing bit - with just that one line to go on, we don't have any idea what class actually implements this method. So who you call to get an inventory item is simply not known.
I'm resisting providing code samples of how this could work, hoping you'll take a shot at them yourself. Can you take a guess at what you'd see in the method body? At how somebody would call this method?
BTW: This is supposed to be fun! Don't worry that somebody here will jump on you if you guess wrong.
 
Marc Kryzhan
Greenhorn
Posts: 14
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You are right the declared method exists in an interface file. I've been struggling with this one for a few hours now. Ugh!
I've commented out all the methods in StoreInterface except for three, two of which I have working. I'm implementing the methods in Store.
In this particular instance
public hw9.interfaces.InventoryItemInterface getInventoryItem(String itemName) {
// inventory.indexOf(itemName);
InventoryItem name = new InventoryItem();
name.setName(itemName);
return name.getName();
//inventory.indexOf(itemName);
}
I'm using NetBeans to compile and am currently bombing on the return statement. The methods setName and getName are simple methods found in ItemInventoryInterface.
I could use some help with some coding examples. Pleeease! The above setName and getName methods aren't what I really need but I'm first trying to take baby steps with the app and get something to return. I'm supposed to prompt a user for an itemName and then display details about the item. I have a collection that is storing objects (name, type, price, cost).
Anyhow to get to C I first need to understand B.
Thanks ahead of time.
 
Stan James
(instanceof Sidekick)
Ranch Hand
Posts: 8791
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Your example looks like you're getting the idea.

The line where I added "uh oh" probably doesn't compile. Your method declaration (which should exactly match the one in the interface) promises to return something that implements InventoryItemInterface. I'd bet that the InventoryItem you just created does, so you probably want to return that.
I'm a real nut on names. I'll change the name of a variable several times before I get it right. Eclipse is very nice about helping with that kind of thing. Anyhow, maybe you could do better than "name" for a variable name.

You had a couple lines commented out that look like you're checking to see if the item is already in the inventory. indexOf() makes me think you're testing a Vector. That's probably not your best choice here. If you find inventory items by name, you might want to look at the Map interface, and the HashMap implementation. Hey, another chance to look at interfaces in action! This kind of logic is very common with maps:

But now "new" is not such a good part of item name. See why I change them a few times before they come out right?
Hope that helps. Keep us posted!
[ March 21, 2004: Message edited by: Stan James ]
 
Marc Kryzhan
Greenhorn
Posts: 14
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I ended up getting the gist of types and iterators through this forum.
My end code:
public InventoryItemInterface getInventoryItem(String itemName) {
InventoryItem inv = null;
int invSize = inventory.size();
System.out.println("Store::getInventoryItem() Size Of Inventory Is: " + invSize);
if (inventory.isEmpty()) {
allocator = "empty";
return inv;
}
else {
Iterator i = inventory.iterator();

while (i.hasNext()) {
inv = (InventoryItem) i.next();
if (itemName.equals( inv.getName() )) {
System.out.println("Found Information For Item: " + inv.getName());
allocator = "found";
return inv;
}
}
allocator = "Not Found";
return inv;
}
}
Thanks for your help. Marc
[ March 29, 2004: Message edited by: Marc Kryzhan ]
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic