【发布时间】:2015-12-25 11:58:13
【问题描述】:
我最近发现自己编写了许多如下形式的块:
try {
return Optional.of(thing.doSomething(arg));
} catch (Exception e) {
System.out.println(e.getMessage());
return Optional.empty();
}
这是必要的,因为某些方法发出信号表明它们可能会抛出异常,如果我不在这些方法周围加上 try/catch 块,Eclipse 就会对我大喊大叫。
所以我写了这个:
public static <A, T> Optional<T> tryOpt (Function<A, T> f, A arg) {
try {
return Optional.of(f.apply(arg));
} catch (Exception e) {
System.out.println(e.getMessage());
return Optional.empty();
}
}
因此,我传递给 tryOpt 的任何函数都包含在 try/catch 块中并安全执行,其结果作为 Optional 返回。但是 Eclipse 仍然因为我使用它而对我大喊大叫:
return tryOpt(
((x) -> thing.doSomething(x)),
arg);
我的问题是,我有什么方法可以告诉 Eclipse 和/或 java 编译器没关系,并且我 am 间接地将有问题的方法包含在 try/catch 块中?或者我只是误解了java的工作原理,在这种情况下,有人会介意启发我吗?或者,另一方面,在这种情况下,我可以安全地忽略 Eclipse 的红线警告吗?
【问题讨论】:
-
如果我不使用 try/catch 块包围这些方法,Eclipse 会冲我大喊:不。如果你没有捕捉到异常或抛出它,它就会对你大喊大叫。返回一个空的可选项而不是发出问题的信号很可能不是处理异常的适当方式。只需抛出异常。或者捕获它,将其包装到适当抽象级别的另一个异常中,然后抛出该新异常。如果您不想强制调用者处理它,则该新异常可以是 RuntimeException。
-
捕捉
Exception尤其不是一个好主意:它捕捉一切,包括您实际上不打算处理的异常(如NullPointerException 等),隐藏错误,并返回不正确的结果而不是发出问题的信号。
标签: java eclipse functional-programming java-8