我有一个启用了接口的简单类,并且在使用时可以正常工作。
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
的方法中调用任何代码,那么您正在查看的是以下内容。
代替创建类型为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();
}
}
一种可能的解决方案是@Nicklas解释的解决方案。