我的课程有一个名为connect(par1, par2, par3)
的方法,par3
是interface/listenr
。
提供par3
我可以按照以下方式执行:
connect(par1, par2, asynchCallBack2 );
private class asynchCallBack2 implements MqttCallback {
...
...
}
OR:
connect(par1, par2, asynchCallBack2 );
MqttCallback asynchCallBack2 = new MqttCallback {
...
...
}
在任何一种情况下,每件事都很好。那么有什么区别以及每个实现的使用场景?
答案 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();
}
}
作为一般原则,如果您需要更多功能,同时仍然能够遵循旧版本,那么创建该类的扩展版本的实例而不是创建匿名实例是有意义的。