Inner classes
Glen Starchman
glen at enabledventures.com
Fri Jun 15 12:16:46 EDT 2001
Paul Prescod wrote:
> In Java all of the code would have to be in a class and _onclick would
> have to be defined in *another* class (because you can't pass references
> to functions/methods). Thus you need inner classes.
One of the most difficult (well, maybe not *difficult*, but
definitely time-consuming) things in converting Java classes to
Jython (or Python) classes is that bastard of all Java features: the
anonymous inner class. Given code that looks like:
class StupidExample
{
StupidExample()
{
JButton button = new JButton("Dumb Button");
button.addActionListener(new ActionListener()
{
actionPerformed(event e)
{
doSomething();
...
}
}
}
}
What happens if you decide to add another button that has similar
functionality? In this case, you end up writing yet another
anonymous inner class. Icky.
So, in Jython, what I do is either implement ActionListener in the
parent class, and write a multi-purpose handler, or write a second
class for the handler:
class StupidExample(ActionListener):
def __init__(self):
self.button = JButton("Dumb Button")
self.button.addActionListener(self)
def actionPerformed(e):
if e.getSource==self.button:
doSomething()
...
Now, after typing all of that I have forgotten my point... oh,
yeah... Inner Classes (and *especially* Anonymous Inner Classes)
suck.
>
> In some languages without first-class classes, you hack classes through
> function "closures". In languages without first-class functions, you
> hack functions through "one-method classes". Python has both and you
> don't have to hack!
Hurray for Python!
> --
> Take a recipe. Leave a recipe.
> Python Cookbook! http://www.ActiveState.com/pythoncookbook
More information about the Python-list
mailing list