首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java跳过尝试捕捉可抛函数

Java跳过尝试捕捉可抛函数
EN

Stack Overflow用户
提问于 2015-11-26 11:17:00
回答 4查看 2.2K关注 0票数 1

我想知道在Java中是否有一种方法可以“跳过”可抛出函数的try-catch方法,因为我知道该函数不会抛出异常。

我有一段代码:

代码语言:javascript
复制
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = format.parse(dateString); // <-- Compiler error here
Log.i(PF.TAG, date.toString());

我收到编译器错误,说没有处理异常。

错误:(97,30)错误:未报告的异常ParseException;必须捕获或声明为抛出

我可以通过将format.parse()放入试捕获中来消除此错误。

在Swift 2错误处理中,有一个选项可以执行try! someFunction(),如果有错误,它将编译和执行throwable函数并崩溃。

在Java中是否有类似的方法,所以我不需要把所有的小任务都放在我知道不会在尝试捕获中抛出异常的地方?

EN

回答 4

Stack Overflow用户

发布于 2015-11-26 11:23:06

不完全是这样,但您可以编写一个助手方法来欺骗编译器,使其相信选中的异常是未检查的。例如:

代码语言:javascript
复制
public static <T> T uncheck(Callable<T> callable) {
  try {
    return callable.call();
  } catch (Throwable t) {
    return rethrow(t);
  }
}

@SuppressWarnings("unchecked")
private static <E extends Throwable, T> T rethrow(Throwable t) throws E {
  throw (E) t;
}

你会像这样使用它:

代码语言:javascript
复制
Date date = uncheck(() -> format.parse(dateString));

还可以将选中的异常包装为未检查的异常,就像jOOL所做的这里一样。

票数 1
EN

Stack Overflow用户

发布于 2022-11-05 20:27:18

是的,你可以,但这需要隆布克:

代码语言:javascript
复制
@SneakyThrows(ParseException.class)
Date parseSilently(String date) {
  DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  return format.parse(dateString); // No error
}

详情请参见文献资料

票数 1
EN

Stack Overflow用户

发布于 2015-11-26 11:25:30

不怎么有意思。

在Java中,通常有两种类型的异常-选中(扩展异常)或未检查(扩展RuntimeException)。

以某种方式处理检查的异常是强制性的,而不这样做会导致编译时异常,就像在您的例子中一样。处理这些问题的方法有两种:

  • 试着-拦网。如果需要,只需提供一个空catch子句和一个有用的注释就可以忽略它,并说明为什么永远不应该发生这种情况。
    • throws声明。它是方法声明的一部分,并将处理异常的责任转移到已声明方法的客户端。

如果您想模仿您提到的Swift结构,您需要的是这样的内容:

代码语言:javascript
复制
try {
    someFunction()
} catch (Exception e) {
    throw new <some runtime exception>
}

通过这种方式,您可以“吞下”检查过的异常,停止它的传播,而不是抛出一个未经检查的运行时异常,这不会迫使调用方处理它,如果原始异常发生,将导致崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33937250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档