在匿名类中获取方法的参数

时间:2015-07-01 07:19:21

标签: java keystroke

我有一个关于键绑定的问题。我有以下Java代码:

scanf()
Eclipse告诉我private void registerPressedReleasedKey(String keyChar, boolean key, boolean pressedKey) { // 1. decide if the key is pressed or released // 2. save key and its action name // 3. decide, what to do, when the action name is being mentioned // 4. change the boolean value in actionPerformed(ActionEvent ae) String keyStatus; if(pressedKey == true) keyStatus = "pressed "; else keyStatus = "released "; getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(keyStatus + keyChar), keyStatus + keyChar); getActionMap().put(keyStatus + keyChar, new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { key = pressedKey; } }); } 是错误的,因为我只能使用key = keyPressed;个变量。我的问题是,是否有可能在final方法中访问和更改key

1 个答案:

答案 0 :(得分:2)

回答你的问题

无法按照您尝试的方式修改匿名类中的外部变量,因为这些变量必须是最终的。

如果这是您班级的一个领域,您可以直接使用它(在Java> 7中)或使用访问者(setter)。因为它不是,所以要走use a wrapperfinal意味着你不能分配新的值,但你仍然可以调用它的方法,任何访问器基本上都是一种方法。

警告通知

我假设您的代码不完整,因为在此示例中,您尝试设置变量key,这在任何地方都没有使用。

然而,assigning a new value to a parameter is generally a bad practice

此外,getActionMap()& AbstractAction表示正在使用Swing组件,这意味着ActionPerformed()将被Swing线程调用,甚至可能在registerPressedReleaseKey()完成之后。因此,更新此方法的参数毫无意义。