我正在使用反射来创建对象。根据正在构建的实际对象,构造函数可能会针对特定的自定义异常提供一个throws声明,而且它的重要性我可以理解。Java - 从反射式构造函数中捕捉异常
不幸的是,当我试图将异常添加到包括反射结构try块的渔获量,代码将无法编译,因为:
“无法到达catch块这个异常是永远不会从抛尝试 声明正文“
我意识到,捕捉基类异常会工作,事实上,这对我的代码是好的。但是,情况可能并非总是如此,因为其他不同的例外情况可能适用于未来的其他对象,并且在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 – MadProgrammer 2012-08-01 03:38:59
很高兴看到一些代码 – akf 2012-08-01 03:39:30
您只能捕获InvocationTargetException – 2012-08-01 03:40:18