normally I implement my Runnables as follows (directly implemented inner class):
Runnable updateRunnable = new Runnable() {
public void run() {
}
}
Is there an开发者_StackOverflow中文版y 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
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.
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.
精彩评论