为什么我们使用 KeyEvent.VK_?而不是简单地使用角色

Why do we use KeyEvent.VK_? instead of simply using the character

假设我们要为菜单项设置助记符,我们希望它是'c'。我注意到几乎所有的代码都写成:

menuitem.setMnemonic(KeyEvent.VK_C);

我知道我们可以这样写:

menuitem.setMnemonic('c');

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

在第二个例子中,字符'c'是一个"magic"字符。它现在恰好是正确的值,但将来可能不是。如果它真的改变了,就必须有人去找到所有输入 'c' 的地方并修复它。如果使用常量表达式,如第一个示例,则只需更改一个地方。

你可能会想 "but of course it won't change, it will always be just 'c'"。肯定有一些时候常量可能会矫枉过正。例如,如果魔法值只使用一次,或者是一个 100% 永远不会改变的值。但是考虑一下它是否会变成 'c\special-character' 之类的。使用常量代替魔术字符串或字符更安全,也是最佳实践。