If I do the following,
final class FooButton extends JButton{
FooButton(){
super(\"Foo\");
addActionListener(new ActionListener(){
Yes, because in the anonymous inner class you could access it like this:
final class FooButton extends JButton {
Foo() {
super("Foo");
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FooButton button = FooButton.this;
// ... do something with the button
}
});
}
}
The code of the anonymous ActionListener
could in principle be called and use the FooButton
before the FooButton
object is fully initialized.
Yes, the anonymous inner class of ActionListener
has a reference to this
.
Yes. this
of the enclosing class is implicitly in an non-static anonymous class.
Yes, the this reference escapes to the listener. Since this listener is not really an external class, I don't see any problem with it, though.
Here's where you could see that this escapes:
final class FooButton extends JButton{
Foo(){
super("Foo");
addActionListener(new ActionListener(){
private buttonText = FooButton.this.getText(); // empty string
@Override
public void actionPerformed(ActionEvent e){
// do stuff
}
});
this.setText("Hello");
}
}