有没有办法在Java中全局处理异常?

时间:2014-10-12 15:06:31

标签: java inheritance exception-handling

在C#中,我们可以调用一个带有Function或Action的方法,并在try catch中执行它。通过这样做,我们可以在一个地方处理所有异常,使其更易于管理。

由于Java没有委托,因此不能以相同的方式执行。还有其他选择吗?


我们有2个类:A和B. B是A的子类.B中的所有方法都覆盖A中的方法。

我是否必须处理B中方法中的所有异常,或者有没有办法在A中处理它而只是重新抛出B?我的假设是我必须在B中处理它,但我想证实这一点。

2 个答案:

答案 0 :(得分:2)

C#委托对你所描述的内容并不重要 - 它们只是传递对任意函数的引用的另一种方式。普通的对象通过多态性的特征提供了同样的东西。

在经典Java中,您可以传递RunnableCallable的实现,并且可以将这些实现作为匿名类提供。在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)大概是你要找的东西