获取匿名方法的参数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()
完成之后.因此,更新此方法的参数毫无意义。
我有一个关于键绑定的问题。我有以下 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()
完成之后.因此,更新此方法的参数毫无意义。