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
&B
都从某个公共基类派生或实现公共接口的情况下完成这项工作?