什么是最好用于异常输出消息动态生成String或StringBuilder或StringBuffer?

时间:2010-03-12 06:18:23

标签: java exception

什么是最好用于异常输出消息动态生成String或StringBuilder或StringBuffer?

3 个答案:

答案 0 :(得分:7)

StringBuffer大部分已被StringBuilder取代,因为它不同步,所以速度更快。 String很好,除非您正在进行很多连接

由于您在Exception消息生成的上下文中询问此问题,我会说保持简单并使用String。精心设计的系统不应该频繁抛出Exception StringBuilder / StringBuffer的性能优势。

也就是说,异常的频率应该足够低,以至于构造详细消息的方式对整体性能几乎没有影响。 “过早优化是所有邪恶的根源”。仅根据分析优化需要它的部分。

如果您的代码花费重要的时间为String动态生成Exception,那么您的设计就会出现 错误的内容。优化过程的这一部分并不会带来太大的好处,因为异常构造成本很高(例如堆栈跟踪捕获部分)。

答案 1 :(得分:0)

StringStringBuilder都可以 - 无论哪种代码都是最易读的。 (这不是您希望经常运行的代码,并且可能不涉及长循环或深度递归。)

StringBuffer是不必要的,除非它将从多个线程访问 - 如果你正在编写多线程异常消息生成器,你不需要我的帮助,我也希望你能留在很远的地方。 :)

根据您在这些消息中的内容以及您打算使用它做什么,请考虑以包含单独信息位的单独字段的方式对Exception进行子类化。例如,Java 7 NIO的InvalidPathException有三个参数:原始错误输入,输入无效的原因以及错误索引 - 足以让您构建详细,格式良好的错误显示。

答案 2 :(得分:0)

我更喜欢使用 String.format。它使 Java 中字符串格式的使用更加清晰和方便。

public EntityNotFoundException(String entityName, String field, String data) {
    super(String.format("No %s data found with %s: [%s]", entityName, field, data));
}