Java 对于一长串代码,分解的标准是什么

Java 对于一长串代码,分解的标准是什么,java,formatting,Java,Formatting,Java代码示例: public String toString() { return (title + '\n' + border + '\n' + getEmpID() + " " + getLastName() + " " + getFirstName() + " " + getHours() + " " + getRate() + " " + getGross() + border);} 正如您所看到的,这是一个很长的toStri

Java代码示例:

public String toString() {

   return (title + '\n' + border + '\n' + getEmpID() + " " 
           + getLastName() + " " + getFirstName() + " " 
           + getHours() + " " + getRate() + " " + getGross() + border);}
正如您所看到的,这是一个很长的toString覆盖

哪里是将代码行分解为较小位的标准位置。在“”之后的“+”之前?救命啊

另外,如果你能告诉我如何正确地放置{},那就太好了

public String toString(){
   return (title + '\n' + border + '\n' + getEmpID() + " " 
           + getLastName() + " " + getFirstName() + " " 
           + getHours() + " " + getRate() + " " + getGross() + border);
}
我们通常做以下大括号放置。例如if语句

if (condition) {
 // do smth
} else {
 // do smth
}

另一种选择是在每个重要关键字之前打断:

return (title + '\n'
      + border + '\n'
      + getEmpID() + " " 
      + getLastName() + " " 
      + getFirstName() + " " 
      + getHours() + " " 
      + getRate() + " " 
      + getGross() 
      + border);

我会这样做的

public String toString()   
{   
   StringBuilder sb = new StringBuilder();    
   sb.append(title).append('\n')      
   .append(border).append('\n')      
   .append(getEmpID()).append(" ")     
   .append(getLastName()).append(" ")    
   .append(getFirstName()).append(" ")    
   .append(getHours()).append(" ")    
   .append(getRate()).append(" ")     
   .append(getGross()).append(" ")
   .append(border);

   return sb.toString();    
}
最好的方法是遵循团队遵循的惯例。请始终记住,他们将是阅读和维护此代码的人,因此遵循组织设置的标准是最好的

对于串联,我建议使用String.format,它提供了字符串格式和参数替换的printf样式。然而,我更喜欢MessageFormat.format,因为它使用了{0}..{n},老实说,我觉得它更可读。两者都返回格式化字符串

字符串。格式%s%s%d,foo,bar,3将给出字符串foo bar 3 format{0}{1}{2},foo,bar,3也会给出字符串foo-bar 3

对于大括号,这将是

if(condition) {
    // code block
    // code block
} else {
    // code block
    // code block
}
根据Oracle Java编码约定

大括号“{”显示在与声明语句相同的行末尾 右大括号“}”开始一行,该行自身缩进以匹配其相应的开口 语句,除非它是空语句,“}”应立即出现在 “{“ 但是请注意,许多开发人员对这种称为拥抱别人的行为感到厌烦

您还可以使用Checkstyle,它是一个eclipse插件,在保存工作时为您自动设置这些内容的格式


我再次重申,首先要遵循团队的标准。

基本上取决于您当地的惯例。我个人会:

删除整个表达式周围的和;它们没有区别 到处使用字符串文字而不是字符文字;这样可以避免意外地执行整数加法而不是串联 在+运算符之前中断行,这清楚地表明,下一行的开始实际上是在现有语句的中间,而不是一个新语句。这是一个一般约定,不限于这种情况。 无论是在空格之前还是在值之前中断,都要保持一致;你已经在这样做了。我认为哪种方式保持一致并不重要,甚至不同语句之间是否保持一致也不重要,但在一个方法中保持一致很好。 将右大括号移动到下一行 添加@Override注释 这将导致:

@Override public String toString() {
    return title + "\n" + border + "\n" + getEmpID() + " " 
        + getLastName() + " " + getFirstName() + " " 
        + getHours() + " " + getRate() + " " + getGross() + border;
}

您也可以考虑使用字符串连接来代替,也可能考虑每行只包含一个值和空间,从而导致代码更长但更容易更改,例如

@Override public String toString() {
    return title + "\n" 
        + border + "\n" 
        + getEmpID() + " " 
        + getLastName() + " " 
        + getFirstName() + " " 
        + getHours() + " " 
        + getRate() + " " 
        + getGross() 
        + border;
}
值得注意的是,无论平台如何,您的toString方法始终将\n用作换行符。这是一个合理的决定,但您需要注意。就个人而言,我通常不在toString结果中包含换行符,但这是您的决定。

我最好使用

StringBuilder
它提供了更好的性能。字符串串联在每个concat之后创建一个新字符串,因为字符串是不可变的

StringBuilder是一种可变的字符串表示形式

像您在示例中所做的那样进行这样的字符串连接是不好的做法


注意

我明白了!所以在方法声明和返回值之间没有空格,代码行中的换行符应该在+操作之前。请确保我理解。谢谢。啊,我明白了-你刚才说的只是大括号的位置。对不起,误解了,取消了下一票。@JonSkeet没问题,buddy:你认为是什么StringBuilder的一部分在这里?它看起来比字符串连接表单更让我分心。此外,如果我使用它,我会缩进.append行。我宁愿使用MessageFormat.format或string.format,这会提供更可读的代码。我会将字符串生成器留给循环中的字符串构建。字符串连接更昂贵这就是为什么我更喜欢StringBuilder。字符串-串联在每次concat之后创建一个新字符串-虽然这是语言规范所允许的,但我使用的Java编译器没有效率这么低。相反,整个表达式将通过分配单个StringBuilder并附加表达式的每个术语来计算,创建正好有一个新的字符串对象。这个行为也是.Compile OP的代码所允许的,您可以自己查看生成的字节码。