android接口使回调函数可选

时间:2015-07-17 21:01:41

标签: android interface callback

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

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()。

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

2 个答案:

答案 0 :(得分:5)

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

但是,如果您需要始终在方法中调用InterfaceTwo的两种方法,但您并不总是需要调用interface方法中的任何代码,那么您正在寻找什么而是以下。

您可以使用具有空方法体的基类,而不是创建类型为interface的新匿名类,而只是覆盖您需要的类。抽象基类实现的方法基本上是可选的,而未实现的方法是必需的方法。

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

interfacename

答案 1 :(得分:1)

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

但是,如果您使用Java 8,则可以使用default method。所以你可以用这种方式声明你的界面:

public interface InterfaceName {
    default void function1(){ /* do nothing */}
    default void function2(){ /* do nothing */}
}

因此,您可以避免实现这些方法,因为您提供的是默认实现。在我的例子中,默认是什么都不做,但当然,你可以个性化它们。

注意:显然目前Android不支持Java 8,因此您无法使用此解决方案。这只是一个Java提示。