从以下3种不同的实现中,基于可读性,性能等,哪一个看起来像是一个好的候选者?
示例#1:
@Override
public String toString() {
return "GuiTemplateCriteriaImpl [appTitle=" + appTitle
+ ", button1Text=" + button1Text + ", button2Text="
+ button2Text + ", defaultMessageText=" + defaultMessageText
+ ", rootFolder=" + rootFolder + ", supportedFileExt="
+ supportedFileExt + ", list1ToolTipText=" + list1ToolTipText
+ ", list2ToolTipText=" + list2ToolTipText + "]";
}
实施例#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();
}
实施例#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();
}
围绕此方法的其他任何最佳做法?请指教
谢谢!
答案 0 :(得分:5)
示例1将在幕后为您使用单个StringBuilder
。示例2和3将编译为相同的字节码但使用更多StringBuilder
s,每个字符串连接一次使用非文字String
时,但此情况下的开销可以被忽略了。使用可以简化特定情况的代码可读性和可维护性的那个。
IMO你应该使用选项#4:
@Override
public String toString() {
return "GuiTemplateCriteriaImpl"
+ "["
+" appTitle=" + appTitle
+ ", button1Text=" + button1Text
+ ", button2Text=" + button2Text
+ ", defaultMessageText=" + defaultMessageText
+ ", rootFolder=" + rootFolder
+ ", supportedFileExt=" + supportedFileExt
+ ", list1ToolTipText=" + list1ToolTipText
+ ", list2ToolTipText=" + list2ToolTipText
+ "]";
}
答案 1 :(得分:1)
我会使用选项#1。每次在字符串上使用 |
tag-----------------
| \
branch-1 branch-2
并置时,选项#2和#3都会创建一个新的StringBuilder。这不是很多开销,但它可以加起来,因为你每次创建一个新对象并扔掉它。选项#1只创建一个StringBuilder,因为它只是一个很长的串联连接。
您可以重新格式化选项#1,使其看起来更好。
+
答案 2 :(得分:1)
正如旁注:
如果您不介意使用第三方库,那么您还可以查看Apache Commons Lang3中的ToStringBuilder
:http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/ToStringBuilder.html
它允许对输出格式进行一些自定义(使用预定义的实现或自我实现的ToStringStyle
)。