gpt4 book ai didi

java - 获取匿名类中方法的参数

转载 作者:行者123 更新时间:2023-11-30 03:21:49 25 4
gpt4 key购买 nike

我有一个关于按键绑定(bind)的问题。我有以下 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

最佳答案

回答您的问题

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

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

警告通知

我假设您的代码不完整,如本示例中所示,您尝试设置变量 key,但该变量未在任何地方使用。

但是,assigning a new value to a parameter is generally a bad practice .

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

关于java - 获取匿名类中方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31154895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com