我有一个简单的类,启用了接口,并在使用时正常工作。
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)但如果有另一种方法可以在需要时执行特定的回调,那将会非常好。
答案 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提示。