首页 > 解决方案 > 下划线作为 Java 中的变量名。为什么?

问题描述

我们正在经历将我们的产品代码库从 Java 8 升级到 Java 12 的过程。我们发现的一个问题是我们的代码有许多情况下划线字符 (_) 被用作变量名,这不再被允许(显然从 Java 9 开始)。这是遗留代码,所以我真的不知道为什么一开始就这样写。在绝大多数情况下,似乎定义了一个方法(名为 _ )来按名称检索资源字符串。例如,这种方法的一个实例如下所示:

private static String _(String key)
{
    return PTR.getResources ().getStringProperty (key);
}

该方法是这样使用的:

JFileChooser chooser = m_directory.getFileChooser ();
chooser.setDialogTitle (_("chooser.title"));
chooser.setFileFilter (ExtensionsFileFilter.withFullDescription (_("chooser.shp"), ".shp"));
chooser.setFileSelectionMode (JFileChooser.FILES_AND_DIRECTORIES);
addProperty (_("labels.dir"), m_directory);

我们正在重命名 _ 方法。但是,我很好奇为什么在我们的代码中如此频繁地使用这种模式。这是在某个时候流行的模式吗?使用某种技术(Swing)时是否流行?到目前为止,我所有的谷歌都只发现了变量不能再命名为 _ 的事实,但没有解释为什么一开始就这样做了。原来的开发者已经不在了,所以我不能问他们。

有没有人有任何想法?

我不认为这是建议问题的重复。该问题被标记为“c”,而我的问题被标记为“java”。此外,该问题的公认答案说 _ 函数是 gettext 提供的预定义函数。这并不特别适用于我,因为我所询问的 _ 函数实际上是在我们的 java 代码库中定义的。话虽如此,建议问题的上下文和此处发布的一些信息似乎表明存在关系。听起来 _ 函数/方法通常可以理解为在检索可本地化的字符串资源时使用。

标签: java

解决方案


我不能代表您的代码,但我知道该_方法是用于 i18n 方法的别名(例如在gettextlaravel 中)。我猜想下划线是用来防止像GetTranslationFor()经常使用的方法名称那样乱扔整个代码。


推荐阅读