使用Parameter Constructor实现Java Inner-Class direclty?

时间:2009-10-29 06:22:45

标签: java

通常我按如下方式实现我的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或者将类实现为“普通”内部类(不是直接的)实现)。

非常感谢你! 扬

2 个答案:

答案 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无法访问最终的局部变量,就像这里描述的其他技术一样。