如何从匿名 class 设置祖先实例变量?

How can I set ancestor instance variables from an anonymous class?

我有一个我无法更改的第三方库 class,它有一个 protected 实例变量,我不会在实例化时将其设置为非默认值。这个 class 没有 setter 也没有允许我设置这个实例变量的构造函数。

我试过了

// The library class I cannot change:
public class LibraryClass {
    protected boolean instanceVar = false;
}

// My code:
public class MyClass {
    LibraryClass myInstance = new LibraryClass() {
        instanceVar = true;
    };
}

但在行 instanceVar = true; 上收到编译器错误“ expected”。我还尝试在这一行之前添加 this.super.,但得到了相同的错误消息。

当然,我可以创建一个非匿名后代 class 并在其构造函数中设置变量。但是有没有可能直接在匿名class中初始化祖先实例变量?

您需要使用实例初始化块:

LibraryClass myInstance = new LibraryClass() {
    {
        instanceVar = true;
    }
};

注意额外的一对大括号。

您可以使用初始化块:

public class MyClass {
    LibraryClass myInstance = new LibraryClass() { 
        {
            instanceVar = true;
        }
    };
}