在java中有一个非常奇怪的语法错误

时间:2015-07-26 10:18:10

标签: java syntax

我的java程序中出现了一个非常奇怪的错误。 此代码未显示错误:

buttonPlay.addListener(new ClickListener(){
            public void clicked(InputEvent event, float x, float y) {
                /*public GameScreen(Create create) {
                    this.create = create;
                }*/
            }
        });

但如果删除评论,Eclipse会说明有两个错误:

  1. 我应该插入一个“}”来完成“public void”的方法体 点击”。

  2. 我应该删除代码的最后一个“}”。

  3. 所以“public GameScreen(Create create)”会产生问题,Eclipse突然不再知道块的开始和结束位置(我认为)。

    我对此没有任何解释,并且会为每一个答案感到高兴。

2 个答案:

答案 0 :(得分:6)

在注释掉的代码取消注释后,您尝试直接在方法中声明构造函数。你不能用Java做到这一点。

// You can't do this
buttonPlay.addListener(new ClickListener(){                   // 1
    public void clicked(InputEvent event, float x, float y) { // 2
        public GameScreen(Create create) {                    // 3
            this.create = create;                             // 3
        }                                                     // 3
    }
});
  1. 实例化匿名类。这很好。

  2. 实现该匿名类的方法(您希望在那里添加@Override)。也没关系。

  3. 直接在另一个方法中声明构造函数。你做不到。

答案 1 :(得分:1)

public void clicked(...)是一种方法,在其中,您正在尝试创建一个构造函数(至少这是注释代码的内容)。

构造函数是特定于类的,不能嵌套在方法中。这就是编译失败的原因。