java - 如何使方法接受具有两个接口(interface)的实例?

标签 java oop interface

我有几个接口(interface):

public interface Speaker {
    void speak();
}

public inteface Walker {
    void walk();
}

我想要一个方法,它采用 SpeakerWalker 的实例。

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

public interface WalkerSpeaker extends Walker, Speaker {

}

并接受:

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

但这对于许多组合来说相当麻烦,并且每个实现都必须继承自 WalkerSpeaker 才能工作!

有没有更好的办法?

最佳答案

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

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

类型参数 T 对两个接口(interface)都是“双界”的,所以本质上 T 将是一个 WalkerSpeaker 除非你不这样做'不必为它写一个单独的接口(interface)。

关于java - 如何使方法接受具有两个接口(interface)的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37837033/

相关文章:

c# - 类型参数约束是一个类

java - 为什么使用线程时我的程序变慢?

java - 通过传递 0 和 null 为 Null 参数重载方法

java - SQL 实用函数的开源 Java 库?

php - 对象常量的可见性

java - 从基类构造函数创建子类实例

c# - 如何使用 MEF 导入多个实例?

c# - 为什么List类要实现IList接口(interface)?

java - 如何使用 thymeleaf 同时迭代两个列表

java - 为什么 Dagger 图可以在 java 中工作,但在 Kotlin 中却说在我提供时缺少提供?