Есть ли способ получить доступ к переменным области действия вызывающего абонента из анонимного внутреннего класса в 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 ()
?