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

标签 java anonymous-inner-class

在以下代码片段中:

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);
                };
            };
        }
    };
}

有没有办法从内部匿名类引用匿名类的外部实例?

第二个错误是我在这里找到的解决方案 Keyword for the outer class from an anonymous inner class 。这些问题似乎共享一些概念和问题空间,但本质上有所不同。

最佳答案

可以通过定义一个新字段来捕获对封闭的 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);
            };
        };
    }
};

关于java - 从内部匿名类引用匿名类的外部实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40605001/

相关文章:

Java - 更改变量值而不访问它

java - 为什么内部类实例变量不能修改外部类实例变量,而内部类局部变量可以

java - ListView setCellFactory 会搞乱绑定(bind),除非匿名内部类?

java - 匿名内部类与静态字段

ios - 你能在 Swift 中创建匿名内部类吗?

java - 具有内部类和最终变量的线程化 Java 服务器

java - 发布表单时设置请求属性

java - 使用 iim4j 修改或添加新标签到 jpg(元数据)

java - 如何使用 OSGi 标准功能以编程方式在 SCR 中注册服务?

java - JSF 2 : invoking managed bean directly