【发布时间】:2012-07-29 22:26:11
【问题描述】:
我正在使用反射创建一个对象。根据正在构造的实际对象,构造函数可能有一个针对特定自定义异常的 throws 声明,它很重要,我可以捕捉到这一点。
不幸的是,当我尝试将异常添加到包含反射构造的 try 块的捕获中时,代码将无法编译,因为:
“无法到达的catch块。这个异常不会从try中抛出 声明正文”
我意识到捕获基类 Exception 会起作用,事实上这对我的代码来说是可以的。但是,情况可能并非总是如此,因为其他不同的异常可能会在将来应用于其他对象,并且在 catch 中使用 instanceof 并重新抛出其他所有内容似乎并不优雅。
有没有办法表明可能会抛出此异常,以便我可以专门捕获它?
编辑:根据要求提供一些代码。由于上述原因无法编译。
try{
Constructor<? extends Thing> constructor = getClassType().getDeclaredConstructor(SomeParameter.class);
Thing thing = constructor.newInstance(new SomeParameter());
}
catch(FoobarException e){
//new Thing(SomeParameter p) might throw this
}
catch(ReflectiveOperationException | IllegalArgumentException | SecurityException e){}
【问题讨论】:
-
我认为反射不可能推断出一个方法在编译时可能会抛出什么异常——事实上,反射 API 会因此抛出它自己的异常。我什至不确定在运行时确定这一点的方法:P
-
能看到一些代码就好了
-
只能捕获 InvocationTargetException
-
@galuano1,我认为您应该将其发布为答案
标签: java exception reflection exception-handling