繁体   English   中英

Java:如何从静态嵌套类中引用外部类的非静态字段?

[英]Java: how to reference a non-static field of an outer class from a static nested class?

有没有办法从静态嵌套类中引用外部类的非静态字段?

请在下面查看我的代码:

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()之后,两个调用中的测试标签的值均设置为“标签2”。

我正在使用Zk框架,ZK没有封闭实例,因此内部嵌套类TestLabel必须是静态的。

谢谢,索尼

如果没有对象引用,内部静态类将无法访问封闭类的成员变量。 内部静态类的行为类似于顶级静态类,只是封装在一个类中。

嵌套类教程。

最好的选择可能是构造一个将实例的value作为参数传递的实例,或以该实例的value作为参数调用方法。

内部类不能是静态的才能起作用。 它需要访问TestComponent的封闭实例以引用value 删除静态修饰符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM