在检查类私有字段是null还是空时,我可以避免illgealAccessException吗



这是布尔方法中的代码块,我想检查是否有空字段或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来指示确实出现了意外错误。

相关内容

  • 没有找到相关文章