Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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_Anonymous Inner Class - Fatal编程技术网

Java 从内部匿名类引用匿名类的外部实例

Java 从内部匿名类引用匿名类的外部实例,java,anonymous-inner-class,Java,Anonymous Inner Class,在以下代码段中: public void main(){ //Enclosing scope final TextField field = new TextField("", uiSkin) { @Override protected InputListener createInputListener() { return new TextFieldClickListener() { @Ov

在以下代码段中:

public void main(){
    //Enclosing scope
    final TextField field = new TextField("", uiSkin) {
        @Override
        protected InputListener createInputListener() {
            return new TextFieldClickListener() {
                @Override
                public boolean keyUp(com.badlogic.gdx.scenes.scene2d.InputEvent event, int keycode) {



                    // error1 => The local variable field may not have been initialized
                    System.out.println("Field "+field+"event="+event+" key={}"+keycode);

                    // error2 => No enclosing instance of the type TextField is accessible in scope
                    System.out.println("Field "+TextField.this+"event="+event+" key={}"+keycode);



                    return super.keyUp(event, keycode);
                };
            };
        }
    };
}
有没有办法从内部匿名类引用匿名类的外部实例


第二个错误是我在这里找到的解决方案。问题似乎有一些共同的概念和问题空间,但性质不同。

可以通过定义一个新字段来解决问题,该字段捕获对封闭this的引用

//Enclosing scope
final TextField field = new TextField("", uiSkin) {
    TextField this2 = this;
    @Override
    protected InputListener createInputListener() {
        return new TextFieldClickListener() {
            @Override
            public boolean keyUp(com.badlogic.gdx.scenes.scene2d.InputEvent event, int keycode) {
                System.out.println("Field "+this2+"event="+event+" key={}"+keycode);
                return super.keyUp(event, keycode);
            };
        };
    }
};

这个问题可以通过定义一个新字段来解决,该字段捕获对封闭的this的引用

//Enclosing scope
final TextField field = new TextField("", uiSkin) {
    TextField this2 = this;
    @Override
    protected InputListener createInputListener() {
        return new TextFieldClickListener() {
            @Override
            public boolean keyUp(com.badlogic.gdx.scenes.scene2d.InputEvent event, int keycode) {
                System.out.println("Field "+this2+"event="+event+" key={}"+keycode);
                return super.keyUp(event, keycode);
            };
        };
    }
};