通常我按如下方式实现我的Runnables(直接实现内部类):
Runnable updateRunnable = new Runnable() {
public void run() {
}
}
在Java中是否有通过在构造函数中传递任何参数来实现Class的工作方式如下?
Runnable updateRunnable = new Runnable(locale) {
Locale locale = null;
public Runnable(Locale locale){
this.locale = locale
}
public void run() {
}
};
==>我的目标是直接实现内部类,但我想传入一个参数。
这是做到这一点的最佳解决方案(上面的示例似乎不起作用????)是唯一可能使用getter setter或者将类实现为“普通”内部类(不是直接的)实现)。
非常感谢你! 扬答案 0 :(得分:5)
你可以做类似的事情:
final Locale locale;
Runnable r = new Runnable() {
public void run() {
// have direct access to variable 'locale'
}
};
需要注意的重要一点是,您传入的Locale
必须为final
,以便您能够执行此操作。
你必须以某种方式初始化locale
以便编译。
答案 1 :(得分:2)
另一种选择是使用静态内部类。
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() {
}
}
}
根据您查看事物的方式,这种方法的缺点是MyRunnable无法访问最终的局部变量,就像这里描述的其他技术一样。