如何初始化匿名类的对象?

Sal*_*med 2 java constructor inner-classes

我们不能在匿名类中声明构造函数.但是如果我需要使用局部变量的值初始化匿名类的对象的状态,我该怎么做?

aio*_*obe 5

你可以这样做:

final int localVar = 5;

new Runnable() {
    int innerVar = localVar;  // <--- initialized here

    public void run() {
        System.out.println(innerVar);
    }
}.run();
Run Code Online (Sandbox Code Playgroud)

如果localVar是变异的(不是最终的)你可以使用它来解决它

...
final int tmp = localVar;
new Runnable() {
    int innerVar = tmp;
    ...
...
Run Code Online (Sandbox Code Playgroud)

另请注意,如果需要调用方法或进行其他初始化,您可以使用实例初始值设定项,而这通常是在构造函数中执行的操作:

final int localVar = 5;

new Runnable() {
    int innerVar;

    // Initialization block executed upon construction of this class
    {
        System.out.println("Initializing an anonymous Runnable");
        innerVar = localVar;
    }

    public void run() {
        System.out.println(innerVar);
    }
}.run();
Run Code Online (Sandbox Code Playgroud)

请参阅:为什么选择java Instance初始化程序?