格式化传递给Java中的函数的多个参数

通常,传递给函数的参数数量可能很大。 考虑以下情况:

calculate(dataManager.getLastUpdate().getNumberOfChildren(), dataManager.getLastUpdate().getNumberOfParents(), dataManager.getLastUpdate().getNumberOfGrandChildren(), long milliseconds, int somethingelse) 

Java中有一个指南可以提供一种对齐参数的方法吗? 在一行中拟合所有参数看起来不太漂亮。

根据Sun的Java编码惯例 ,第4.1段“包装线”:

当表达式不适合单行时,请根据以下一般原则将其分解:

  • 逗号后打破。
  • 在运营商之前rest。
  • 更喜欢较高级别的rest时间到较低级别的rest时间。
  • 将新行与前一行中相同级别的表达式的开头对齐。
  • 如果上述规则导致令人困惑的代码或代码被压缩到右边距,则只需缩进8个空格。

该文档还包括方法调用的一些示例:

 function(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); var = function1(longExpression1, function2(longExpression2, longExpression3)); 

当我必须调用这样的方法时,我喜欢将参数放在他们自己的行上,如下所示:

 final int result = calculate ( dataManager.getLastUpdate().getNumberOfChildren(), dataManager.getLastUpdate().getNumberOfParents(), dataManager.getLastUpdate().getNumberOfGrandChildren(), milliseconds, somethingelse ); 

显然这是个人偏好,但如果您在代码上与其他人合作,请尝试遵守已经提出的约定。

我会把我的小沙粒放在这里,很久以前,一位名叫Esteban的开发人员向我提出了这种格式,我以前认为它很难看,一段时间没有别的办法让我感到满意:

 final int result = calculate ( dataManager.getLastUpdate().getNumberOfChildren() , dataManager.getLastUpdate().getNumberOfParents() , dataManager.getLastUpdate().getNumberOfGrandChildren() , long milliseconds , int somethingelse ); 

我觉得这很清楚,很容易添加/删除新参数,清除参数#,每行只有一个参数,方法调用结束非常明确等等……

用于定义方法的类似模式也是如此

 public int calculate( final int numberOfChildren , final int numberOfParents , final int numberOfGrandChildren , final long milliseconds , final int somethingelse ) throws CalucalteExceptio { // MyCode } 

最后是嵌套调用的相同模式,StringBuilder典型的序列

  StringBuilder sb = new StringBuilder() .append('Children #').append(numberOfChildren).append(NL) .append('Parents #').append(numberOfParents).append(NL) .append('GrandChildren #').append(numberOfGrandChildren).append(NL) ; 

我发现的唯一问题是IDE格式化程序永远不会允许这种“开头的逗号”方法非常有趣,并且比我尝试过的任何其他方法都更具可读性。

希望它增添一些有趣的东西

我可能会将getNumberOf *()方法的返回值赋给变量:

 SomeObject lastUpdate = dataManager.getLastUpdate(); int children = lastUpdate.getNumberOfChildren(); int parents = lastUpdate.getNumberOfParents(); int grandChildren = lastUpdate.getNumberOfGrandChildren(); calculate(children, parents, grandChildren, milliseconds, somethingelse); 

参考您的示例,Eclipse和其他IDE以上面的方式对其进行格式化(每行1个参数,所有左对齐)并且通常看起来非常好。

我完全同意你的例子,即每行有一个参数,所有参数都排在一起。

它可以很容易地扫描列表,看看有什么或缺少什么。

它还可以更容易地将空值记录为“// user id”或类似的东西。

我发现它在视觉上很容易解析,而不是有几行长的密集值,这些值通常看起来很相似。