在Java 7 multicatch块中,捕获的exception的类型是什么?
在Java 7多个分块中,如下所示:
try { // code that throws exception } catch (CharacterCodingException | UnknownServiceException ex) { // handle exception }
什么是ex
的编译时类型? 它是两个exception类型共同的派生类最多的类吗? 在这个例子中,这将是一个IOException
。
是的, ex
的类型是CharacterCodingException
和UnknownServiceException
的最具体的超类型,它将是IOException
。
编辑:直接从马的嘴上http://cr.openjdk.java.net/~darcy/ProjectCoin/ProjectCoin-Documentation-v0.83.html#multi_catch :
非正式地,lub(最小上限)是所讨论类型中最具特异性的超类型。
在JSL 7中http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20-510
§14.20>exception参数的声明类型,表示其类型为与备用D1 |的并集 D2 | …… | Dn是lub(D1,D2,…,Dn)(§15.12.2.7)。
lub()
的定义即最小上限非常复杂。 幸运的是,我们在这里讨论的类型通常只是Throwable的非generics子类,而lub()
产生最具体的超类。
对于更复杂的情况,请考虑
class E1 extends Exception implements G class E2 extends Error implements G lub(E1, E2) = Throwable & G>
- 为什么EOFException主要由数据输入流使用?
- IllegalArgumentException:文件包含路径分隔符Android
- 什么是exception不与throws子句兼容的原因?
- 为什么我不能在Java 8 lambda表达式中抛出exception?
- class not found exception com.mysql.jdbc.driver
- javax.persistence.NoResultException:getSingleResult()没有检索任何实体
- java.net.SocketException:网络无法访问:连接
- 什么样的行为导致中断的exception?
- Java:catch的意义(最终的SomeException e)?