关于Java方法和实现多个接口的参数

Wat*_*oon 4 java parameters interface function

我正在编写一个 Java 应用程序,并且有一个问题。如何实现一个只有一个参数的函数,而该函数需要一个实现多个接口的参数?例如:

interface Father
{
}

interface Teacher
{
}

public void foo(FatherAndTeacher person) // How do I do this?
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用两个参数,例如:

public void foo(Father person1, Teacher person2)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

但我认为也许有一个实现两个接口的参数会更好。

Tho*_*mas 8

两个强制参数具有 2 个接口,您有 2 个基本选项:

  1. 创建一个扩展两者的通用接口并将其用作参数类型:

    interface FatherAndTeacher extends Father, Teacher { 
    }
    
    Run Code Online (Sandbox Code Playgroud)

    问题是未实现该接口的对象不匹配。

  2. 在需要匹配对象来实现两个接口的地方使用泛型:

    public  <T extends Father & Teacher> void foo(T person) {
      // Do something
    }
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,这仅适用于接口,即您不能这样做T extends Number & String(2 个类)。但它适用于一个对象边界,在这种情况下,类必须是第一个:T extends ConcretePerson & Father可以,但T extends Father & ConcretePerson不行(其中ConcretePerson是类)。