android接口使回调函数为可选

问题描述 投票:1回答:2

我有一个启用了接口的简单类,并且在使用时可以正常工作。

interface interfacename{
   void function1();
   void function2();
}


public class asyncfunction(){
   public interfacename listener;
   ...
   onasyncStart( ... ){
        listener.function1();
   }
   ...
   ...
   onasyncComplete( ... ){
        listener.function2();
   }
}

public myclass(){
   ....
   ....
   methodcall(new interfacename(){
       @Override
       public void function1(){
          // executes proper
       }

       @Override
       public void function2(){
          // executes proper
       }
   }
}

因此上述方法正常工作。

但是我有时只想调用function1(),而在需要时只调用function2()。

我不希望这两种方法都始终实现。代码看起来很大,我不确定是否会降低代码速度(不是在毫秒级别),但是如果有另一种方法可以在需要时执行特定的回调,那将是非常好的。

android interface callback
2个回答
5
投票

听起来您似乎真的在考虑将interface拆分为多个接口,并更改将interface接受为参数的方法,以便它将接受所需的interface(例如InterfaceOne)以调用该interface中的方法(例如function1())。另一个方法可能要调用function2(),在这种情况下,它将接受InterfaceTwo类型的参数。

但是,如果您需要始终在方法中同时调用interface的两个方法,但是并不需要始终在该interface的方法中调用任何代码,那么您正在查看的是以下内容。

代替创建类型为interfacename的新匿名类,您可以使用具有空方法主体的基类,并简单地覆盖所需的基类。抽象基类实现的方法本质上是可选的,而那些未实现的方法则是必需的方法。]

这是Java开发中非常常见的模式。

public interface InterfaceName {

    void function1();
    void function2();

}

public abstract class BaseInterfaceName implements InterfaceName {

    public void function1() {
    }

    public void function2() {
    }

}

public class MyClass {

    public void myMethod() {
        myMethodWithInterface(new BaseInterfaceName() {
            @Override
            public void function2() {
                System.out.println("function2");
            }
        })
    }

    public void myMethodWithInterface(InterfaceName intf) {
        intf.function1();
        intf.function2();
    }

}

2
投票

一种可能的解决方案是@Nicklas解释的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.