java – 捕获多个异常 – 在捕获的异常上调用Exception中不存在的方法

public class try
{
    public static void main(String[] args)
    {
        try
        {
            if(true)
                throw new A();
            if(true)
                throw new B();
        }
        catch( A | B e)
        {
            e.doit();
        }
    }
}

class A extends Exception
{
    public void doit() {}
}

class B extends Exception
{
    public void doit() {}
}

这不编译

18: error: cannot find symbol
        e.doit();
         ^
symbol:   method doit()
location: variable e of type Exception

变量e似乎最终是类型Exception而不是实际类型 – 这似乎是合乎逻辑的,因为在编译类型时编译器不知道将抛出什么类型.但是,有没有办法在不制作A& A的情况下完成这项工作. B既可以从一些公共基类派生,也可以实现一个通用接口?

最佳答案
不,因为Java不支持duck typing.

做一个instanceof并将e转换为A或B显然会起作用,但在这种情况下你可能想做的是以传统的方式编写两个catch块.

我的意思是,这是有道理的,对吧?如果您想要平等对待不同类型的异常,则多次捕获是合适的.在这种情况下,行为可能会大不相同(即使方法命名相同).

转载注明原文:java – 捕获多个异常 – 在捕获的异常上调用Exception中不存在的方法 - 代码日志