Если вы собираетесь возвращать результаты, используйте именованный внутренний класс вместо анонимного. Все остальные представленные варианты - ИМХО отвратительные хаки (один из них признался; -)
(ОК, @ Joel's нет, но предполагает, что вы можете изменить интерфейс, который вы реализуете)
Просто создайте экземпляр класса с геттером для результата, он чистый и требует только реализации одного класса.
class MyReponseAction implements ResponseAction {
private UnlockDoorResponse response;
public void execute(Session session) throws TimedOutException, RetryException, RecoverException {
session.watch(UNLOCK_DOOR);
response = (UnlockDoorResponse)session.watch(UNLOCK_DOOR);
}
UnlockDoorResponse getResponse() {
return response;
}
}
DoorResult unlockDoor(final LockableDoor door) {
ResponseAction action = new MyResponseAction();
final boolean sent = sendRequest(new UnlockDoorRequest(door), action);
DoorResult result;
if (!sent) {
return DoorResult.COMMS_ERROR;
}
else {
return DoorResult.valueOf(action.getResponse().getResponseCode());
}
}