Java 为什么我们要使用KeyEvent.VK_?而不是简单地使用字符

Java 为什么我们要使用KeyEvent.VK_?而不是简单地使用字符,java,swing,awt,keyevent,mnemonics,Java,Swing,Awt,Keyevent,Mnemonics,假设我们想要为菜单项设置一个助记符,我们想要它是'c'。我注意到,在几乎所有的代码中,它们都是这样写的: menuitem.setMnemonic(KeyEvent.VK_C); 我知道我们可以这样写: menuitem.setMnemonic('c'); 然而,第一种变体似乎更为常见。为什么呢?为什么我们不使用简单的字符而不是像KeyEvent.VK_C这样的东西呢?第一个代码比第二个代码有什么优势?在第二个示例中,字符“c”是一个“魔法”字符。它现在正好是正确的值,但将来可能不是。如果它

假设我们想要为菜单项设置一个助记符,我们想要它是
'c'
。我注意到,在几乎所有的代码中,它们都是这样写的:

menuitem.setMnemonic(KeyEvent.VK_C);
我知道我们可以这样写:

menuitem.setMnemonic('c');

然而,第一种变体似乎更为常见。为什么呢?为什么我们不使用简单的字符而不是像
KeyEvent.VK_C
这样的东西呢?第一个代码比第二个代码有什么优势?

在第二个示例中,字符“c”是一个“魔法”字符。它现在正好是正确的值,但将来可能不是。如果它真的发生了变化,就必须有人找到所有输入“c”的地方并加以修复。如果使用常量表达式,如第一个示例中所示,则只需更改一个位置


你可能会想,“但它当然不会改变,它永远只是‘c’”。在某些情况下,常数肯定会被过度使用。例如,如果魔法值仅使用一次,或者是一个100%不会更改的值。但是,如果它变成“C特殊字符”什么的。使用常量代替神奇的字符串或字符更安全,也是一种最佳做法

在第二个示例中,字符“c”是一个“魔法”字符。它现在正好是正确的值,但将来可能不是。如果它真的发生了变化,就必须有人找到所有输入“c”的地方并加以修复。如果使用常量表达式,如第一个示例中所示,则只需更改一个位置

你可能会想,“但它当然不会改变,它永远只是‘c’”。在某些情况下,常数肯定会被过度使用。例如,如果魔法值仅使用一次,或者是一个100%不会更改的值。但是,如果它变成“C特殊字符”什么的。使用常量代替神奇的字符串或字符更安全,也是一种最佳做法