用参数构造函数实现Java内部类direclty?
通常我实现我的Runnable如下(直接实现的内部类): Java中是否有任何工作方式通过在构造函数中传递任何参数来实现该类,如下所示用参数构造函数实现Java内部类direclty?,java,Java,通常我实现我的Runnable如下(直接实现的内部类): Java中是否有任何工作方式通过在构造函数中传递任何参数来实现该类,如下所示 Runnable updateRunnable = new Runnable(locale) { Locale locale = null; public Runnable(Locale locale){ this.locale = locale } public void run() { } };
Runnable updateRunnable = new Runnable(locale) {
Locale locale = null;
public Runnable(Locale locale){
this.locale = locale
}
public void run() {
}
};
==>我的目标是拥有一个直接实现的内部类,但我想传入一个参数
要做到这一点,最好的解决方案是什么(上面的例子似乎不起作用??),唯一的可能是使用getter setter,或者作为“普通”内部类实现该类(未直接实现)
多谢各位!
jan你可以做类似的事情:
final Locale locale;
Runnable r = new Runnable() {
public void run() {
// have direct access to variable 'locale'
}
};
需要注意的重要一点是,您传入的Locale
必须是final
,才能执行此操作
您必须以某种方式初始化
locale
才能编译该语言。另一个选项是使用静态内部类
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无法像这里描述的其他技术那样访问最终的局部变量 你好,jjnguy,非常感谢您的帮助解决方案!詹妮:是的!没问题。很高兴提供帮助。实际上不需要使用本地字段。您可以直接从
run
方法访问locale
变量。如果我的内存没有出现问题,那么它将成为Runnable
对象中的一个隐式字段,由编译器添加。
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() {
}
}
}