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