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