在Java中格式化长方法调用的可接受方式

时间:2015-06-25 11:25:22

标签: java coding-style code-structure

写作是好的风格:

objectName.methodWithManyParameters(someLongParameter1, someLongParameter2, someLongParameter3, someLongParameter4, someLongParameter5);

(对于一行来说,显然很长)

objectName.methodWithManyParameters
(
    someLongParameter1, 
    someLongParameter2, 
    someLongParameter3, 
    someLongParameter4, 
    someLongParameter5
);

另一种方式是:

objectName.methodWithManyParameters(someLongParameter1, someLongParameter2, 
                                    someLongParameter3, someLongParameter4,
                                    someLongParameter5);

3 个答案:

答案 0 :(得分:4)

根据Oracle conventions

4.2包装线

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

  • 逗号后打破。
  • 在经营者面前休息。
  • 更喜欢较高级别的休息时间到较低级别的休息时间。
  • 将新行与表达式的开头对齐,位于上一行的同一级别。

如果上述规则导致令人困惑的代码或代码被压缩到右边距,则只需缩进8个空格。

以下是一些破解方法调用的示例:

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


恢复

第二个选项是标准约定,首先是更具可读性,但是在很长的方法中可能会有害,或者由于类的长度而导致多次调用......

答案 1 :(得分:3)

如果您正在与他人合作,或者在预先存在的代码库中,请使用他们已经使用的任何标准。 80 vs 100列,选项#1/2/3等

如果你自己工作,Jordi的回答就是这样。使用Oracle约定,可能使用100个字符的行长度;我们拥有的现代屏幕非常适合1996年的显示器。

答案 2 :(得分:2)

据我所知,没有标准的换行方式。这要么是个人偏好,要么是公司内部编码风格标准。 不过,我建议您阅读Google Java Style。以下是可能相关的引用。

我的个人偏好如下(希望有所帮助):

objectName.methodWithManyParameters( someLongParameter1, 
                                    someLongParameter2, 
                                    someLongParameter3, 
                                    someLongParameter4, 
                                    someLongParameter5 );
  

4.4色谱柱限制:80或100

     

项目可以自由选择80或100的列限制   字符。除非如下所述,否则任何超出此范围的行   limit必须是换行的,如第4.5节所述,   换行。

     

例外:

     

无法遵守列限制的行(例如,a   Javadoc中的长URL,或者长JSNI方法引用)。包装和   import语句(参见3.2节包语句和3.3导入   语句)。注释中的命令行可以剪切和粘贴   变成一个壳。   4.5换行

     

术语注意:当代码可能合法占用时   单行分为多行,通常要避免   溢出列限制,此活动称为换行。

     

没有全面的,确定性的公式显示具体如何   在任何情况下都换行。通常有几个有效的   用同一条代码换行的方法。

     

提示:提取方法或局部变量可以解决问题   无需换行。

     

4.5.1在哪里打破

     

换行的主要指令是:更喜欢突破   句法层面。也:

     

如果在非赋值运算符处断行,则会出现中断   在符号之前。 (请注意,这与使用的练习不同   适用于其他语言的Google风格,例如C ++和JavaScript。)   也适用于以下"类似运营商的"符号:点   分隔符(。),类型bounds()中的&符号,   和catch块中的管道(catch(FooException | BarException e))。   当一个线在赋值运算符处断开时,通常会中断   符号后面,但两种方式都可以接受。这也是   适用于"赋值运算符"结肠增强了   (" foreach")声明。方法或构造函数名称保持附加   后面的开括号(()。逗号(,)保持连接   到它之前的标记。