Это недопустимо, потому что во время компиляции тип переменной e
в (MyExceptionType1 | MyExceptionType2 e)
относится к наиболее конкретному распространенному супер-типу MyExceptionType1
и MyExceptionType2
.
Каким бы ни был распространенный супертип MyExceptionType1
и MyExceptionType2
, он слишком широк для MyExceptionType1
или MyExceptionType2
в качестве аргумента для метода. Это объясняет, почему он работает с одиночными блоками захвата.
Общий суперкласс этих двух классов, вероятно, будет Exception
, если эти два класса не расширяют другой класс исключений. Таким образом, вам может потребоваться проверить экземпляры объектов исключений (то есть, если вы не хотите использовать multi-catch):
process (Exception e){ //If the exceptions extend a common specific type, use it here
if(e instanceof MyExceptionType1)
process((MyExceptionType1) e);
else if (e instanceof MyExceptionType2)
process((MyExceptionType2) e);
}