java - 生成异常或在 if 中使用 instanceof

标签 java performance exception

有时,为了避免使用 if,我会创建抛出异常的代码来解析某些值。

例如:当您有一个输入字段可以在其中输入要搜索的合作伙伴编号或合作伙伴名称时,我确实喜欢:

try {
    Integer.parseInt(string);
    // use the input as int
} catch (NumberFormatException) {
    // use the input as a String
}

现在我也遇到了类似的问题,但是使用的是InputStream

InputStream is;
try {
    is = (FileInputStream) fileItem.getInputStream();
} catch (ClassCastException e) {
    is = (ByteArrayInputStream) fileItem.getInputStream();
}

我的问题是:最好以这种方式抛出异常或者可能是带有instanceof的if,例如:

InputStream is;
if (fileItem.getInputStream() instanceof FileInputStream) {
    is = (FileInputStream) fileItem.getInputStream();
} else if (fileItem.getInputStream() instanceof ByteArrayInputStream) {
    is = (ByteArrayInputStream) fileItem.getInputStream();
}

还有为什么

我发现了类似的问题herehere但没有确切的说法

最佳答案

对于异常,更一般的规则是避免它们,如果它们也可以用更简单的结构(如 if)来表达。

生成异常的成本很高!它需要收集调用堆栈 - 并且取决于您的应用程序复杂性 - 仅此一项就可能成为堆上可怕的垃圾来源,需要由 GC 清理。

关于java - 生成异常或在 if 中使用 instanceof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28168231/

相关文章:

java - 面积计算器无法运行,不知道为什么

performance - 刮刮卡算法

css - google page speed up-优化css传递

asp.net-mvc - 在 ASP.NET MVC 中返回 FileResult 的错误消息/页面

c# - System.AccessViolation 由于 Marshal.StructureToPtr

c - 如何处理 C 中的数据类型不匹配异常

java - mybatis查询不太好用

java - 如何在 TranslateAnimation 之后将 ImageView 永久设置在某个位置

MySQL:在一列中存储多个 boolean 值。一个 tinyint(4) -vs- 几个 tinyint(4)

java - 当您将变量绑定(bind)到某些数据时会发生什么?