是否在方法签名之前放置空格?

时间:2013-04-15 23:58:25

标签: java naming-conventions

我想知道方法名称及其参数之间的空格的总体建议是什么。

即,以下两行之间的一般偏好:

public static void main (String[] args) {} // (We'll ignore the question of spaces between the `String` and `[]` .)
public static void main(String[] args) {}

我最近开始觉得前者更好,特别是考虑到方法声明中的所有其他内容(例如throws Exception(s)部分)也是空格分隔的。

2 个答案:

答案 0 :(得分:3)

正如@chris在评论中提到的那样,Official Java Code Conventions明确指出:

  

请注意,方法名称与其左括号之间不应使用空格。这有助于区分关键字和方法调用。

正如您在问题中所怀疑的那样,方法是有目的的。

答案 1 :(得分:2)

2018更新:由于几乎所有的IDE都允许轻松调用/声明查找,因此在此处切换约定的主要好处是没有实际意义的。 3年之后,我已经切换回“方法名称后无空格”规则只是因为大多数语言中的大多数样式指南都使用它 ...对现有代码样式的例外是IMVHO可行的收益超过了改变的“WTF因素”;在这种情况下,使用最新的工具,没有实际的收益,所以我个人建议反对下面提出的替代方案。

我不同意1999's unmaintained White Space Java conventions的解释。它只是说该空间不应用于帮助区分关键字和方法调用。因此,对于是否在不能出现方法调用的情境中使用空格(因此不需要这样的帮助),没有官方规则 - 因此,显然的规则适用到调用上下文(调用可以出现的地方和它有帮助的地方)和适用于声明性上下文(调用不能出现以及它不起作用的地方)。更多 - 因为约定规定空格使用有助于区分使用上下文,使用声明空间实际上与规则的精神保持一致 - 它实际上允许您区分方法调用和方法声明,即使使用简单的文本搜索(只搜索方法名称后跟空格)。

切换到它之后,区分调用与声明变得更容易了。它还突出了这样一个事实,即名称后面的括号不是调用的 - 并且它们的语法与调用语法不同(即在变量名称之前需要类型声明等),正如您已经注意到的那样。

tl; dr 您可以使用

void method () { } // declaration
void method2 () { // declaration
    method(); // invocation
}

能够快速搜索声明/调用以同时满足约定。

请注意,所有正式的Java代码,以及大多数代码样式​​,都不会使用声明中的空格。