我有一个启用了接口的简单类,使用后可以正常工作。
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();
}
}