如何避免布尔方法中的未处理异常?

时间:2018-03-27 05:38:32

标签: java exception exception-handling try-catch

我正在尝试在此方法中使用ReflectiveOperationException,但我收到UnhandeledException错误但是当我用

更改我的异常时
throw new ReflectiveOperationException("izuoizoiuz");

比没有错误。如何避免此UnhandeledException错误。

@Override
public boolean isValid(Object bean, ConstraintValidatorContext ctx) {
    try {
        if (Assert.isNull(bean)) {
            logger.info(EXC_MSG_BEAN_NULL, bean.toString());
        }

        String dependentFieldActualValue;
        dependentFieldActualValue = BeanUtils.getProperty(bean, dependentField);
        boolean isActualEqual = stringEquals(dependentFieldValue, dependentFieldActualValue);

        if (isActualEqual == ifInequalThenValidate) {
            return true; // The condition is not met => Do not validate at all.
        }
        return isTargetValid(bean, ctx); // Perform the actual validation on the target field
    } catch (ReflectiveOperationException e) {
        logger.info("Necessary attributes can't be accessed: {}");
        throw new ReflectiveOperationException("izuoizoiuz");
    }
}

2 个答案:

答案 0 :(得分:2)

ReflectiveOperationException是“已检查”的例外情况。这意味着你的方法需要声明它可以抛出它:

public boolean isValid(Object bean, ConstraintValidatorContext ctx) throws ReflectiveOperationException {

另请注意,您不必创建新的ReflectiveOperationException。您可以throw e重新抛出原始文件,保持其堆栈跟踪等。

答案 1 :(得分:1)

它是一个Checked异常,需要使用方法签名声明(带抛出)或需要像你一样显式抛出。

由编译器强制执行。 您可以使用包装器异常将已检查的异常转换为未经检查的异常。

public Object loadTest (int objId)
{

 try {

    Connection c = Database.getConnection();
    PreparedStatement query = conn.prepareStatement(OBJECT_QUERY);
    query.setInt(1, objId);
    ResultSet rs = query.executeQuery();
    ...
 } catch (SQLException ex) {
    throw new RuntimeException("Cannot query object " + objId, ex);
 }
}