首选toString()实现?

Roo*_*kie 0 java stringbuilder tostring

从以下3种不同的实现中,哪一个看起来像一个基于可读性,性能等的好候选者?

实施例#1:

@Override
public String toString() {
    return "GuiTemplateCriteriaImpl [appTitle=" + appTitle
            + ", button1Text=" + button1Text + ", button2Text="
            + button2Text + ", defaultMessageText=" + defaultMessageText
            + ", rootFolder=" + rootFolder + ", supportedFileExt="
            + supportedFileExt + ", list1ToolTipText=" + list1ToolTipText
            + ", list2ToolTipText=" + list2ToolTipText + "]";
}
Run Code Online (Sandbox Code Playgroud)

实施例#2:

@Override
public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append("GuiTemplateCriteriaImpl")
           .append("[")
           .append("  appTitle="    + appTitle)
           .append(", button1Text=" + button1Text)
           .append(", button2Text=" + button2Text)
           .append(", defaultMessageText=" + defaultMessageText)
           .append(", rootFolder="  + rootFolder)
           .append(", supportedFileExt=" + supportedFileExt)
           .append(", list1ToolTipText=" + list1ToolTipText)
           .append(", list2ToolTipText=" + list2ToolTipText)
           .append("]");
    return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)

实施例#3:

@Override
public String toString() {
    return new StringBuilder()
           .append("GuiTemplateCriteriaImpl")
           .append("[")
           .append("  appTitle="    + appTitle)
           .append(", button1Text=" + button1Text)
           .append(", button2Text=" + button2Text)
           .append(", defaultMessageText=" + defaultMessageText)
           .append(", rootFolder="  + rootFolder)
           .append(", supportedFileExt=" + supportedFileExt)
           .append(", list1ToolTipText=" + list1ToolTipText)
           .append(", list2ToolTipText=" + list2ToolTipText)
           .append("]")
           .toString();
}
Run Code Online (Sandbox Code Playgroud)

围绕这种方法的其他任何最佳实践?请指教

谢谢!

Lui*_*oza 5

示例1将为您使用单个StringBuilder幕后.示例2和3将编译为相同的字节码但使用更多的StringBuilders,在使用非文字Strings 时每个字符串连接一个,但是可以忽略此情况的开销.使用可以简化特定情况的代码可读性和可维护性的那个.

IMO你应该使用选项#4:

@Override
public String toString() {
    return "GuiTemplateCriteriaImpl"
        + "["
        +" appTitle=" + appTitle
        + ", button1Text=" + button1Text
        + ", button2Text=" + button2Text
        + ", defaultMessageText=" + defaultMessageText
        + ", rootFolder=" + rootFolder
        + ", supportedFileExt=" + supportedFileExt
        + ", list1ToolTipText=" + list1ToolTipText
        + ", list2ToolTipText=" + list2ToolTipText
        + "]";
}
Run Code Online (Sandbox Code Playgroud)