2014-11-21 4 views
0

У меня есть класс, который имеет метод под названием connect(par1, par2, par3), par3 - это interface/listenr.Два способа реализации обратного вызова, так что это разница

Для обеспечения par3 я могу сделать следующим образом:

connect(par1, par2, asynchCallBack2); 
private class asynchCallBack2 implements MqttCallback { 
... 
... 
} 

ИЛИ:

connect(par1, par2, asynchCallBack2); 
MqttCallback asynchCallBack2 = new MqttCallback { 
... 
... 
} 

и в обоих случаях, каждая вещь работает ЮС штраф. Итак, какова разница и в каких сценариях используется каждая из реализаций?

+0

см. Это http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm –

ответ

1

В одном случае (т. Е. Где вы говорите, реализуете) вы определяете локальный класс метода полного fledge.

В то время как для другого вы определяете анонимный класс, который аналогичен тому, где вы сказали, реализует. Просто, что вы не определяете имя и говорите, как реализуете myinterface, который неявна для компилятора.

Это именно то, как вы определяете свой класс, ничто не меняется с точки зрения функциональности.

0

Разница заключается требование и обработки исключительных случаев, Хоуп этот псевдо код очищает его для вас

interface Engine{ 
    public void start(); 
} 

private class FerrariEngine implements Engine{ 
    public void preStartRoutine(){} 
    public void Start(){} 
} 

private class Main{ 

    private void main(){ 
     Engine engine=getEngine(); 
     if(engine instanceOf FerrariEngine){ 
      ((FerrariEngine)engine).preStartRoutine(); 
     } 
     engine.start(); 
    } 

    private Engine getEngine(){ 


     if(System==Generic) 
     return new Engine{ 
      @override 
      public void start(){ 
       //Do start 
      } 
     } 
     else if(System==Ferrari) 
     return new FerrariEngine(); 

    } 
} 

В качестве общего принципа, если и нужно больше функциональных возможностей, пока еще в состоянии придерживаться старых версия, создающая экземпляр расширенной версии этого класса вместо создания анонимного экземпляра.

Смежные вопросы