这是布尔方法中的代码块,我想检查是否有空字段或null字段。如果它们都不是,则返回true。如果是,它会为每种情况抛出一个自定义异常,但当它让我抛出IllegalAccessException时,它会打乱我的整个程序。
for(Field f: getClass().getDeclaredFields()) {
f.setAccessible(true);
try {
if((f.get(this)) == null) {
throw new NullValueException("Error, this book has null value");
}
if(f.get(this).toString().isEmpty()) {
throw new ItemEmptyException("Error, this book has null value");
}
}catch (IllegalAccessException e) {
throw e;
}
}
即使我使用f.setAccessible(true)
,它仍然使我对异常使用try-catch子句。我可以避免try-catch子句,并且永远不必抛出IllegalAccessException吗?
编译器查看您使用的方法的声明。如果一个方法被声明为(可能(抛出一个已检查的异常,那么调用者必须处理该异常,或者声明也抛出该异常,将异常处理委托给调用者。在您的示例中,您调用f.setAccessible(true);
,因此可能不会遇到IllegalAccessException
,但编译器并不知道这一点。
在您的代码中,我会在catch块中添加一条注释,说明为什么不应该发生这种情况(您将字段设置为可访问(。
如果你不想让你的呼叫者在处理IllegalAccessException
时负担过重,那就扔其他东西吧。如果您的代码实际上不可能触发IllegalAccessException
,那么您可以抛出一个未检查的异常,如IllegalStateException
,或者使用assert
来指示确实出现了意外错误。