jan
jan

Reputation: 45

Java Inner-Class direclty implemented with Parameter Constructor?

normally I implement my Runnables as follows (directly implemented inner class):

Runnable updateRunnable = new Runnable() {

    public void run() { 
    }
}

Is there any working way in Java to implement the Class by passing any parameters in the constructor as follows?

Runnable updateRunnable = new Runnable(locale) {

    Locale locale = null;

    public Runnable(Locale locale){
        this.locale = locale
    }

    public void run() { 
    }
};

==>My goal is to have an directly implemented inner class but I want to pass in a parameter.

Whats the best solution to do this (the example above seems to not be working????) Is the only possibility to work with getter setters or alternatively implement the class as an "normal" inner class (that is not direclty implemented).

thank you very much! jan

Upvotes: 2

Views: 3321

Answers (2)

jjnguy
jjnguy

Reputation: 138864

You can do something similar:

final Locale locale;
Runnable r = new Runnable() {
    public void run() {
        // have direct access to variable 'locale'
    }
};

The important thing to note is that the Locale you pass in must be final in order for you to be able to do this.

You have to initialize locale somehow for this to compile.

Upvotes: 5

Richard Perfect
Richard Perfect

Reputation: 208

The other option is to use a static inner class.

public class MyClass {

    public void someMethod() {
         Runnable runnable = new MyRunnable(someLocaleHere);
    }

    private static class MyRunnable implements Runnable {
         Locale locale = null;

         private MyRunnable(Locale locale) {
             this.locale = locale;
         }

         public void run() {
         }
    }
}

Depending on how you view things the downside of this approach is that the MyRunnable can't access final local variable like the other technique described here.

Upvotes: 2

Related Questions