Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用参数构造函数实现Java内部类direclty?_Java - Fatal编程技术网

用参数构造函数实现Java内部类direclty?

用参数构造函数实现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如下(直接实现的内部类):

Java中是否有任何工作方式通过在构造函数中传递任何参数来实现该类,如下所示

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() {
         }
    }
}