在C#中,我们可以调用一个带有Function或Action的方法,并在try catch中执行它。通过这样做,我们可以在一个地方处理所有异常,使其更易于管理。
由于Java没有委托,因此不能以相同的方式执行。还有其他选择吗?
我们有2个类:A和B. B是A的子类.B中的所有方法都覆盖A中的方法。
我是否必须处理B中方法中的所有异常,或者有没有办法在A中处理它而只是重新抛出B?我的假设是我必须在B中处理它,但我想证实这一点。
答案 0 :(得分:2)
C#委托对你所描述的内容并不重要 - 它们只是传递对任意函数的引用的另一种方式。普通的对象通过多态性的特征提供了同样的东西。
在经典Java中,您可以传递Runnable
或Callable
的实现,并且可以将这些实现作为匿名类提供。在Java 8中,您可以使用lambda语法提供实现。
public static void runWithExceptionHandling(RunnableExc r) {
try { r.run(); }
catch (xxxException e) { ... }
}
public static void main(String[] args) {
runWithExceptionHandling(() -> Files.readAllLines(Paths.get("/x/y"), UTF_8));
runWithExceptionHandling(() -> { throw new xxxException(); });
}
interface RunnableExc { void run() throws Exception; }
答案 1 :(得分:2)
Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)大概是你要找的东西