Java 实现回调的两种方法有什么区别
我有一个类,它有一个名为Java 实现回调的两种方法有什么区别,java,android,Java,Android,我有一个类,它有一个名为connect(par1,par2,par3),par3是一个接口/listenr 要提供par3,我可以执行以下操作: connect(par1, par2, asynchCallBack2 ); private class asynchCallBack2 implements MqttCallback { ... ... } 或: 在这两种情况下,一切都很好。那么,不同之处是什么?在哪些场景中使用了每个实现?在一种情况下(即,在您说实现的地方),您定义的是完整的方法
connect(par1,par2,par3)
,par3
是一个接口/listenr
要提供par3
,我可以执行以下操作:
connect(par1, par2, asynchCallBack2 );
private class asynchCallBack2 implements MqttCallback {
...
...
}
或:
在这两种情况下,一切都很好。那么,不同之处是什么?在哪些场景中使用了每个实现?在一种情况下(即,在您说实现的地方),您定义的是完整的方法本地类
而对于另一个,您定义的匿名类类似于您所说的实现的匿名类。只是您没有定义名称并说like实现了myinterface,这对编译器来说是隐式的
这只是您定义类的方式,功能方面没有任何变化。区别在于需求和处理异常情况,希望这段伪代码能帮您澄清
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();
}
}
作为一般原则,如果您需要更多的功能,同时仍然能够坚持旧版本,那么创建该类的扩展版本的实例而不是创建匿名实例是有意义的。请参见此
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();
}
}