Ingo R. Homann wrote:
Hi,
Shawn wrote:
<new-code>
private String[] = memo{"No Memo 1", "No Memo 2"};
</new-code>
That's it. I cannot see how to spare other lines of code. I still need:
Mapper save1Mapper = new Mapper()
{
public void menuItemAction()
{
memo[0] = theText.getText(); //replace memo1 by memo[0]
}
};
Mapper save2Mapper = new Mapper()
{
public void menuItemAction()
{
memo[1] = theText.getText(); //replace memo2 by memo[1]
}
};
Try something like this (pseudocode):
Mapper[] saveMapper=new Mapper[2];
for(int i=0;i<saveMapper.length;i++) {
saveMapper[i]=new Mapper() {
public void menuItemAction() {
memo[i] = theText.getText();
}
}
}
OK, you do not spare *exactly* half of the code. (But another advantage
is that e.g. you could easily add a third memo without one more line of
code...)
(Note that perhaps you need a final 'i'-Variable due to (IMHO) a lack in
the langspec (*)...)
(*) Yes, I *do* know the background for this, but despite of this I
think that it is a lack in the langspec (because the compiler could
easily translate it into a working version...)
(2) There is one level of 'dispatching' more than necessary:
You are using one MenuItemListener which needs to dispatch the action
using your Map<String, Mapper>. Of course you have to fill the Map in
advance.
It would be easier, if you would use several MenuItemListener
(instead of several Mappers) and add these to the different MenuItems.
So, sou could spare the Map and some of the Code.
Fully agree. I realized in this situation I don't need the interface
Mapper. There is one already for me to use. That is ActionListener. I
can use several inner classes (or ananymous classes directly in the
parameter) implementing ActionListener. So one ActionListener subclass
matches one menu item.
Exactly! (But I think, it was a good idea to implement it the way you
did, because it gives many insights...)
Ciao,
Ingo
Thank you very much. I greatly appreciate it. It is very helpful to me.