如何使方法接受具有两个接口的实例?

2022-09-01 21:58:58

我有几个接口:

public interface Speaker {
    void speak();
}

public inteface Walker {
    void walk();
}

我想要一个方法,它接受既是 a 又是 .SpeakerWalker

现在,我可以实现另一个接口:

public interface WalkerSpeaker extends Walker, Speaker {

}

并接受这一点:

void walkAndTalk(final WalkerSpeaker x) {
    x.walk();
    x.speak();
}

但是,对于许多组合来说,这是非常麻烦的,并且每个实现都必须继承才能正常工作!WalkerSpeaker

有没有更好的方法?


答案 1

您可以使用泛型实现此目的,如下所示

public <T extends Speaker & Walker> void walkAndTalk(T x) {
    x.walk();
    x.speak();
}

type 参数将“双边界”到两个接口,因此实质上将是一个,除非您不必为其编写单独的接口。TTWalkerSpeaker


答案 2