Установка внешней переменной из анонимного внутреннего класса

Есть ли способ получить доступ к переменным области действия вызывающего абонента из анонимного внутреннего класса в Java?

Вот пример код, чтобы понять, что мне нужно:

public Long getNumber(final String type, final String refNumber, final Long year) throws ServiceException {
    Long result = null;
    try {
        Session session = PersistenceHelper.getSession();
        session.doWork(new Work() {
                public void execute(Connection conn) throws SQLException {
                    CallableStatement st = conn.prepareCall("{ CALL PACKAGE.procedure(?, ?, ?, ?) }");
                    st.setString(1, type);
                    st.setString(2, refNumber);
                    st.setLong(3, year);
                    st.registerOutParameter(4, OracleTypes.NUMBER);
                    st.execute();
                    result = st.getLong(4) ;
                }
            });
    } catch (Exception e) {
        log.error(e);
    }
    return result;
}

Код находится в сервисном классе DAO. Очевидно, он не компилируется, потому что требует, чтобы результат был окончательным, если это так - он не компилируется потому что я пытаюсь изменить окончательную переменную. Я привязан к JDK5. Помимо полного удаления doWork () , есть ли способ установить значение результата из doWork () ?

52
задан TC1 12 May 2011 в 01:08
поделиться