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

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

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

最佳答案

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

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

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

这是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();
    }

}

07-24 09:45
查看更多