【问题标题】:Avoiding multiple try catches when every line can throw当每一行都可以抛出时,避免多次尝试捕获
【发布时间】:2018-03-27 09:01:13
【问题描述】:

假设我有以下陈述:

        try {
            this.startTime = dateFormat.parse(startTime);
            this.endTime =  dateFormat.parse(endTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }

这里两行都可以抛出异常,但是如果 startTime 为空而 endTime 不是,则在此块的末尾,两者都将为空。

有没有办法捕获异常并且仍然​​遍历每个语句而不为每个语句创建一个 try catch 块?

【问题讨论】:

  • 用你自己的方法包裹dateFormat.parse(xxx);,然后在里面做try/catch。
  • 您可以在finally 块中分配endTime,它本身会有一个try catch。但这比你已经拥有的更难看。
  • @Maciej 是的,但如果我有更多不同的陈述,那么它就不会一概而论。哦,好吧。
  • @shinzou 通常不是每个语句都会抛出异常。

标签: java exception syntax


【解决方案1】:

没有。

try-block 中的执行将在抛出异常后“中断”。因此,如果您希望执行后续行尽管抛出异常,它们不应该在try 块中。所以你最终可能会得到:

try {
    this.startTime = dateFormat.parse(startTime);
} catch (ParseException e) {
    e.printStackTrace();
}
try {
    this.endTime =  dateFormat.parse(endTime);
} catch (ParseException e) {
    e.printStackTrace();
}

提取像parseDate 这样的方法来让事情变得更好:

    this.startTime = parseDate(startTime);
    this.endTime = parseDate(endTime);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多