如何从匿名 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;
}
};
}
我有一个我无法更改的第三方库 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;
上收到编译器错误“this.
和 super.
,但得到了相同的错误消息。
当然,我可以创建一个非匿名后代 class 并在其构造函数中设置变量。但是有没有可能直接在匿名class中初始化祖先实例变量?
您需要使用实例初始化块:
LibraryClass myInstance = new LibraryClass() {
{
instanceVar = true;
}
};
注意额外的一对大括号。
您可以使用初始化块:
public class MyClass {
LibraryClass myInstance = new LibraryClass() {
{
instanceVar = true;
}
};
}