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

时间:2011-05-16 21:01:55

标签: java formatting code-formatting

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

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

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

6 个答案:

答案 0 :(得分:21)

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

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

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

答案 1 :(得分:15)

根据Sun's Java coding conventions第4.1段“包装线”:

  

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

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

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

function(longExpression1, longExpression2, longExpression3,
         longExpression4, longExpression5);

var = function1(longExpression1,
                function2(longExpression2,
                          longExpression3));

答案 2 :(得分:6)

很久以前,我会把我的小沙粒放在这里,一些名叫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格式化程序从不允许这种“开头的逗号”方法,它非常有趣,并且比我尝试过的任何其他方法都更具可读性。

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

参考你的例子,Eclipse和其他IDE以你上面的方式格式化它(每行1个参数,所有左对齐),通常看起来很不错。

答案 5 :(得分:0)

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

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

它还可以更容易地将空值记录为" //用户ID"或类似的东西。

我觉得它在视觉上很容易解析,而不是通常看起来很像几行密集的值。