获取匿名方法的参数class

Get the parameters of a method in a anonymous class

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

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

Eclipse 告诉我 key = keyPressed; 是错误的,因为我只能使用 final 变量。我的问题是是否有可能在 actionPerformed(ActionEvent ae) 方法中访问和更改 key

回答您的问题

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

如果这是您的 class 的字段,您可以直接访问它(在 Java > 7 中)或使用访问器 (setter)。既然不是,那么要走的路就是 final 意味着你不能分配一个新值,但你仍然可以调用它的方法,任何访问器基本上都是一个方法。

警告通知

我假设你的代码不完整,因为在这个例子中,你尝试设置变量 key,它没有在任何地方使用。

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

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