两种实现回调的方法,有什么区别

时间:2014-11-21 11:46:58

标签: java android

我的课程有一个名为connect(par1, par2, par3)的方法,par3interface/listenr

提供par3我可以按照以下方式执行:

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

OR:

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

在任何一种情况下,每件事都很好。那么有什么区别以及每个实现的使用场景?

2 个答案:

答案 0 :(得分:1)

在一种情况下(即你说工具的地方),你正在定义完整的承诺方法本地类。

而对于另一个,你定义的匿名类与你所说的实现类似。只是你没有定义名称,并说像实现myinterface,这是编译器隐含的。

这就是你定义课程的方式,在功能方面没有任何变化。

答案 1 :(得分: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();

    }
}

作为一般原则,如果您需要更多功能,同时仍然能够遵循旧版本,那么创建该类的扩展版本的实例而不是创建匿名实例是有意义的。