我有一个简单的类,启用了一个接口,并且在使用时可以正常工作。
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上),但如果有另一种方法可以在需要时执行特定的回调,那就太好了。
发布于 2015-07-18 05:26:37
听起来你真的想把你的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();
}
}发布于 2015-07-18 05:33:11
一个可能的解决方案是@Nicklas解释的那个。
但是,如果您使用Java8,则可以使用default method。所以你可以这样声明你的接口:
public interface InterfaceName {
default void function1(){ /* do nothing */}
default void function2(){ /* do nothing */}
}因此,您可以避免实现这些方法,因为您提供的是默认实现。在我的示例中,默认设置是不执行任何操作,但当然,您也可以对它们进行个性化设置。
https://stackoverflow.com/questions/31484650
复制相似问题