Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何从静态嵌套类引用外部类的非静态字段?_Java_Static Members_Nested Class_Zk - Fatal编程技术网

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

Java:如何从静态嵌套类引用外部类的非静态字段?,java,static-members,nested-class,zk,Java,Static Members,Nested Class,Zk,有没有办法从静态嵌套类引用外部类的非静态字段 请参阅下面我的代码: public class TestComponent { String value; public void initialize(String value) { this.value = value; } public static class TestLabel extends GenericForwardComposer { Label testLabel

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

请参阅下面我的代码:

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的:

其思想是使用两个不同的值“Label 1”和“Label 2”动态创建两个标签,并将它们附加到两个不同的组件,即vlayout1和vlayout2。但是,当我运行此代码时,每个布局都会附加一个标签,但两个标签的值都是“标签2”。您可以在以下位置进行测试:

问题是testlabel.zul中的两个窗口由两个对IncludeFilder的调用创建,它们共享静态类testlabel。在super.doAfterCompoe()之后,在两个调用中,test label的值都设置为“label 2”

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

谢谢,
Sony

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


最好的替代方法可能是构造一个实例,将实例的
值作为参数传递,或者将其作为参数调用一个方法。

内部类不能是静态的,这样才能工作。它需要访问
TestComponent
的封闭实例才能引用
值。删除静态修改器。

我认为没有一种方法可以完全按照您的要求执行。正如您所说,当内部类被加载时,类还没有被实例化,因此值字段还没有被实例化。TestLabel真的需要是静态的吗?您的内部类必须是静态的吗?如果是,您能否为
TestLabel
创建一个构造函数并将
value
传递给它?@nicholas.hauschild:请查看我编辑的问题。内部类必须是静态的。此外,TestLabel类中的每个字段都引用在单独的zul文件中创建的UI组件。因此,我不认为我可以在内部类中创建“value”字段并在构造函数中设置它的值?如果无法将内部类更改为非静态,则需要某种方法将值传递到该实例中。