【发布时间】:2017-06-01 17:00:35
【问题描述】:
我有两个继承自 java.lang.Exception 的类。他们都有一个签名相同的方法void a(){...}。它们都可以放在代码块中。如果我这样做:
catch (SubException1 | SubException2 e)
{
e.a();
}
然后它不会编译,因为方法a() 不属于异常。这是Java语言缺陷吗?我应该如何正确设计我的代码以防止代码冗余?
【问题讨论】:
-
签名无所谓,是不是一些普通超类的方法一样?
a是否在SubException1和SubException2的某个公共超类中定义? -
您可以通过为它们提供一个具有规定方法
void a()的共同祖先来消除冗余。然后就可以抓到祖宗了,调用e.a() -
当使用 multicatch 时,异常局部变量的实际类型是最接近的常见超类型,在您的情况下它看起来像
Exception。所以SubException1有a()并不重要。正如已经建议的那样,您可以通过在两种方法上使用带有a()的公共超类型来解决此问题。
标签: java exception catch-block multi-catch