Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,下划线作为变量名。为什么?_Java - Fatal编程技术网

在Java中,下划线作为变量名。为什么?

在Java中,下划线作为变量名。为什么?,java,Java,我们正在经历将产品代码库从Java8升级到Java12的过程。我们发现的一个问题是,我们的代码中有许多情况下,下划线字符(389;)被用作变量名,这是不允许的(显然是从Java9开始)。这是遗留代码,所以我真的不知道为什么一开始它是这样写的。在绝大多数情况下,似乎都有一个定义的方法(名为_)来按名称检索资源字符串。例如,此类方法的一个实例如下所示: private static String _(String key) { return PTR.getResources ().getSt

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

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);
该方法的使用方式如下:

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);
我们正在重新命名uu方法。然而,我很好奇为什么这个模式在我们的代码中被如此频繁地使用。这在某种程度上是一种流行的模式吗?使用某种技术(Swing)时是否流行?到目前为止,我所有的谷歌都只发现了变量不能再命名这一事实,但没有解释为什么一开始可能会这样做。原来的开发者已经不在了,所以我不能问他们

有人有什么想法吗


我不认为这是一个复制品。这个问题被标记为“c”,而我的问题被标记为“java”。另外,这个问题的公认答案是u函数是由gettext提供的预定义函数。这在我的示例中并不特别适用,因为我所问的函数实际上是在java代码库中定义的。话虽如此,建议问题的背景和这里发布的一些信息似乎表明了一种关系。听起来u函数/方法通常可以理解为在检索可本地化字符串资源时使用

我不能为您的代码说话,但我知道
\uu
方法是i18n方法的别名(如in或)。我猜下划线是用来防止在整个代码中乱丢方法名的,比如经常使用的
GetTranslationFor()

也许是非常喜欢下划线库的JS程序员做到了这一点,JKIn Javascript将一个复杂的库绑定到一个字母或下划线上(例如:)大大减少了Javascript文件的大小,因为在过去,文件越大,加载东西所需的时间就越长,先是56K,然后是手机。不过,对于Java应用程序来说,这是一些真正的代码味道。我想不起过去15年中的任何例子。您展示的例子使用了
\uuu
作为方法名,而不是变量名。这听起来像是最有可能的解释,以及JK和Compas对我最初问题的评论,关于Javascript和下划线。也许最初的开发人员以前遇到过这种模式,并继续使用它。