Jarek
Jarek

Reputation: 7729

How to initialize anonymous inner class in Java

Is there any way to initialize anonymous inner class in Java?

For example:

new AbstractAction() {
    actionPerformed(ActionEvent event) {
    ...
    }
}

Is there any way to use for example putValue method somewhere in the class declaration?

Upvotes: 18

Views: 13450

Answers (4)

Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 299218

Use an Initializer Block:

new AbstractAction() {

    {
        // do stuff here
    }

    public void actionPerformed(ActionEvent event) {
    ...
    }
}

Initializing Instance Members

Normally, you would put code to initialize an instance variable in a constructor. There are two alternatives to using a constructor to initialize instance variables: initializer blocks and final methods. Initializer blocks for instance variables look just like static initializer blocks, but without the static keyword:

{
    // whatever code is needed for initialization goes here
}

The Java compiler copies initializer blocks into every constructor. Therefore, this approach can be used to share a block of code between multiple constructors.

Source:

Upvotes: 42

weekens
weekens

Reputation: 8292

You can use the instance initialization section:

new AbstractAction() {
    {
       //initialization code goes here
    }

    actionPerformed(ActionEvent event) {
    ...
    }
}

Upvotes: 6

Or you can just access the variables of the outer class from the inner class.

http://en.wikibooks.org/wiki/Java_Programming/Nested_Classes#Anonymous_Classes

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1503489

It's not quite clear what you mean, but you can use an initializer block to execute code at construction time:

new AbstractAction() {

    {
        // This code is called on construction
    }

    @Override public void actionPerformed(ActionEvent event) {
    ...
    }
}

Upvotes: 7

Related Questions