在检查 Class 私有字段是否为 null 或空时,我可以避免 illgealAccessException 吗?

Can I avoid illgealAccessException when checking if Class private fields are null or empty?

这是布尔方法中的代码块,我想检查是否有任何空字段或空字段。如果其中 none 是,则 returns 为真。如果是,它会为每种情况抛出一个自定义异常,但当它让我抛出 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 来指示确实发生了意外错误。