>假设我们要为菜单项设置一个助记符,并且我们希望它'c'
。我注意到在几乎所有代码中,他们都将其编写为:
menuitem.setMnemonic(KeyEvent.VK_C);
我知道我们可以这样写:
menuitem.setMnemonic('c');
但是,第一种变体似乎更常见。为什么?我们为什么不只使用简单的字符而不是像KeyEvent.VK_C
这样的东西?第一个代码比第二个代码有什么优势?
在第二个示例中,字符"c"是一个"魔术"字符。它恰好是现在的正确值,但将来可能不会。如果它确实发生了变化,有人将不得不去找到所有输入"c"的地方并修复它。如果使用常量表达式(如第一个示例所示(,则只需要更改一个位置。
你可能会想"但它当然不会改变,它永远只是'c'"。肯定有常量可能矫枉过正的时候。例如,如果魔术值只使用一次,或者是一个 100% 永远不会更改的值。但是考虑一下它是否变成"c\特殊字符"或其他东西。使用常量代替魔术字符串或字符更安全,也是最佳实践。