2013-06-20 3 views
0

В настоящее время приведенный ниже код дает компиляцию erorr, потому что слушатель не знает, что такое smsTask. Мне нужен экземпляр smsTask в слушателе. Возможно ли сделать это без, передавая его в контратаку? Кажется redunant, если я:Получение ссылки на объект в интерфейсе, который не прошел

.createTask(smsTask,new TaskCompleteListener(smsTask){...} 

текущий код:

public void doStuff(){  
     SmartPhoneTask smsTask=createSmsTask(); 
     super.getSystem().createTask(smsTask,new TaskCompleteListener(){ 

      @Override 
      public void onTaskComplete() { 
       releaseResources(smsTask);//error. 

      }}); 

    } 

    private SmartPhoneTask createSmsTask() { 
     return new SmartPhoneTask(); 
    } 

CreateTask:

void createTask(SmartPhoneTask task, TaskCompleteListener listener); 

ответ

3

Вы можете объявить переменную final:

final SmartPhoneTask smsTask=createSmsTask(); 
0

Если TaskCompleteListener находится под вашим контролем, вы можете добавить параметр Task к методу onTaskComplete():

public void onTaskComplete(Task task) { 
    releaseResources(task); 
} 

Теперь System должен пройти соответствующую задачу к слушателю, когда метод onTaskComplete() называется.

С помощью этого способа вы также можете добавить те же самые TaskListener к нескольким задачам.