java - 使用 Java 在内部方法中使用非最终变量

标签 java

我正在使用 Jdbctemplate 并尝试在 mapRow 方法内设置 boolean 值。但它不允许,它说

Cannot refer to a non-final variable isEveryTransactionNotClosed inside an inner class defined in a different method

这是我的代码

public boolean isEveryTransactionNotClosed (String txIds) throws QiibException {
    String sql = "<Query> ";
    logger.info("isEveryTransactionNotClosed SQL :"+sql);
    boolean isEveryTransactionNotClosed = true;
    try {
        isEveryDealNotClosed =  getJdbcTemplate().queryForObject(sql, new Object[] {dealIds}, 
                new RowMapper<Boolean>()  {
                public Boolean mapRow(ResultSet rs, int rowNum) throws SQLException {
                    if (!rs.next()) {
                        isEveryTransactionNotClosed = false;    -->                         
                    }
                }
        });
    } catch(EmptyResultDataAccessException e) {
        logger.error("Empty result data - isEveryTransactionNotClosed ");   
    }
   return isEveryTransactionNotClosed ;
}

如何在类中使用 isEveryTransactionNotClosed?

最佳答案

您的代码存在一些问题:

    public boolean isEveryTransactionNotClosed (String txIds) throws QiibException {
        String sql = "<Query> ";
        logger.info("isEveryTransactionNotClosed SQL :"+sql);
        try {
            final boolean isEveryDealNotClosed =  getJdbcTemplate().queryForObject(sql, new Object[] {dealIds}, 
                    new RowMapper<Boolean>()  {
                    public Boolean mapRow(ResultSet rs, int rowNum) throws SQLException {
                        if (!rs.next()) {
                            isEveryTransactionNotClosed = false;    -->                         
                        }
                    }
            });
        } catch(EmptyResultDataAccessException e) {
            logger.error("Empty result data - isEveryTransactionNotClosed ");   
        }
       return isEveryTransactionNotClosed ;
    }

将解决您现在遇到的问题,这将带来两个新问题:

 1. You would try to re-assign a final variable
 2. Your method has a return value Boolean, but doesn't return anything.

将代码更改为:

public boolean isEveryTransactionNotClosed (String txIds) throws QiibException {
    String sql = "<Query> ";
    logger.info("isEveryTransactionNotClosed SQL :"+sql);
    boolean isEveryDealNotClosed = true;
    try {
        isEveryDealNotClosed =  getJdbcTemplate().queryForObject(sql, new Object[] {dealIds}, 
                new RowMapper<Boolean>()  {
                public Boolean mapRow(ResultSet rs, int rowNum) throws SQLException {
                    return rs.next();
                }
        });
    } catch(EmptyResultDataAccessException e) {
        logger.error("Empty result data - isEveryTransactionNotClosed ");   
    }
   return isEveryDealNotClosed;
}

关于java - 使用 Java 在内部方法中使用非最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46883773/

相关文章:

java - AspectJ + Junit + Maven - 在测试中识别切入点但 NoSuchMethodError : aspectOf() exception thrown

java - Apache 与 vaadin7 共用电子邮件吗?

java - 如何在 MappingJackson2MessageConverter 中设置 typeIdPropertyName

java - JSP 的分页问题

java - 建立预约网站的最简单方法是什么?

java - 未使用 CronTriggerFactoryBean 设置 CronTrigger 失火指令

java - "even teams"代码的迭代运行速度更快

java - 如何为所有 Controller 和页面仅绑定(bind)一次共享片段的数据?

java - 为什么javac要创建一个额外的类?

java - 如何在 java 卡片程序中比较随机生成的卡片?