В JSL 7 http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20-510
§14.20> Объявленный тип параметра исключения, который обозначает его тип как объединение с альтернативами D1 |D2 |... |Dn является lub (D1, D2, ..., Dn) (§15.12.2.7).
Определение lub()
, т. Е. наименьшая верхняя граница , весьма запутанно.К счастью, типы, о которых мы здесь говорим, обычно являются просто неуниверсальными подклассами Throwable, и lub()
дает наиболее специфический суперкласс.
Для более сложного случая рассмотрим
class E1 extends Exception implements G<A>
class E2 extends Error implements G<B>
lub(E1, E2) = Throwable & G<?>