有没有办法从静态嵌套类引用外部类的非静态字段?
请参阅下面的代码:
public class TestComponent {
String value;
public void initialize(String value) {
this.value = value;
}
public static class TestLabel extends GenericForwardComposer {
Label testLabel;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
testLabel.setValue(value);
}
}
}
此代码在testLabel.setValue(value)处抛出错误,因为我试图对非静态字段进行静态引用。但是,我需要将值设置为非静态,并在静态嵌套类的方法中引用它。我该怎么做?
您可能会注意到我在这里实例化TestComponent.java:http://top.cs.vt.edu/~vsony7/patches/gfc.patch
我们的想法是使用两个不同的值“Label 1”和“Label 2”动态创建两个标签,并将它们附加到两个不同的组件,即vlayout1和vlayout2。但是,当我运行此代码时,标签会附加到每个布局,但两个标签的值都是“标签2”。您可以在以下位置进行测试:
问题在于,两个调用IncludeBuilder创建的testlabel.zul窗口共享静态类TestLabel。在super.doAfterCompoe()之后,两个调用中test label的值都设置为“Label 2”。
我使用的是Zk框架,而ZK没有封闭的实例,所以内部嵌套类TestLabel必须是静态的。
谢谢, 索尼
答案 0 :(得分:2)
内部静态类在没有对象引用的情况下无法访问封闭类的成员变量。内部静态类就像顶级静态类一样,只是打包在类中。
您最好的选择可能是构造一个将实例value
作为参数传递的实例,或者将其作为参数调用方法。
答案 1 :(得分:2)
内部类不能是静态的,因为它可以工作。它需要访问TestComponent
的封闭实例才能引用value
。删除静态修改器。