En un bloque de multicast de Java 7, ¿cuál es el tipo de excepción atrapada?

En un bloque de multicast de Java 7 como el siguiente:

try { // code that throws exception } catch (CharacterCodingException | UnknownServiceException ex) { // handle exception } 

¿Cuál es el tipo de tiempo de comstackción de ex ? ¿Es la clase más derivada que ambos tipos de excepción tienen en común? En este ejemplo, eso sería una IOException .

Sí, el tipo de ex es el supertipo más específico de CharacterCodingException y UnknownServiceException , que sería IOException .

Editar: Directamente desde la boca del caballo en http://cr.openjdk.java.net/~darcy/ProjectCoin/ProjectCoin-Documentation-v0.83.html#multi_catch :

Informalmente, el lub (límite superior mínimo) es el supertipo más específico de los tipos en cuestión.

En JSL 7 http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20-510

§14.20> El tipo declarado de un parámetro de excepción que denota su tipo como unión con alternativas D1 | D2 | … | Dn es lub (D1, D2, …, Dn) (§15.12.2.7).

La definición de lub() es decir, el límite superior mínimo es bastante intrincado. Afortunadamente, los tipos de los que estamos hablando son generalmente subclases no genéricas de Throwable, y lub() produce la súper clase más específica.

Para un caso más complicado, considere

 class E1 extends Exception implements G class E2 extends Error implements G lub(E1, E2) = Throwable & G