有没有办法从静态嵌套类中引用外部类的非静态字段?Java:如何从静态嵌套类引用外部类的非静态字段?
请参阅下面我的代码:
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(值)的错误,因为我想做一个静态引用非静态字段。但是,我需要这个值是非静态的,然而在静态嵌套类的方法中引用它。我该怎么做?
你可能会注意到我如何实例TestComponent.java这里:http://top.cs.vt.edu/~vsony7/patches/gfc.patch
的想法是用两个不同的值“标记1”和“标记2”动态创建两个标签,并把它们添加到两个不同的组件,即vlayout1和vlayout2。但是,当我运行此代码时,标签会附加到每个布局,但两个标签的值都是“标签2”。您可以在以下位置进行测试:
问题是由两个对IncludeBuilder的调用创建的testlabel.zul创建的两个窗口共享静态类TestLabel。在super.doAfterCompoe()之后,测试标签的值在两次调用中均设置为“标签2”。
我使用Zk框架,ZK没有封闭的实例,所以内部嵌套的类TestLabel必须是静态的。
谢谢, 索尼
我不认为有一种方法可以做到你想要的。正如你所说,当内部类被加载时,类没有被实例化,所以值字段没有被实例化。 TestLabel _really_需要是静态的吗? – Miquel
你的内部类是“静态”吗?如果是这样,你是否可以不为'TestLabel'创建一个构造函数并将'value'传递给它? –
@ nicholas.hauschild:请参阅我编辑的问题。内部类必须是静态的。此外,TestLabel类中的每个字段都指的是在单独的zul文件中创建的UI组件。所以,我不认为我可以在内部类中创建“值”字段并在构造函数中设置它的值。 – sony