指定扩展多个类中的任何一个的 java 泛型类型变量的任意方法



假设我有 2 个类:

public class A
{
  public void
  f()
  {
  }
}
public class B
{
  public void
  f()
  {
  }
}

我想编写一个通用静态方法,该方法可以在传递 A 或 B 的实例时调用 f。 我试过了:

public class C
{
  public static <T extends A & B> void
  g(T t)
  {
    t.f();
  }
  public static void main(String[] args)
  {
    A a = new A();
    g(a);
  }
}

但是编译器声称A不是"T扩展A&B"的有效替代品,我认为这是因为T必须同时扩展A和B,而显然A没有。 我找不到指定"T 扩展 A 或 B"之类的方法。 这样的事情是无法实现的吗?我是一个Java新手,所以任何帮助将不胜感激。

只能指定一个泛型类型。请改用接口。

接口指定一组特定的方法,它的每个成员都必须具有。一个类可以实现多个接口。

在您的示例中,我将使用方法定义一个接口 f()

public interface MyInterface {
  void f();
}

AB实现接口:

public class A implements MyInterface
{
  @Override
  public void f() {
    // ...
  }
}
public class B implements MyInterface
{
  @Override
  public void f() {
    // ...
  }
}

然后,您只需将接口指定为方法的参数类型:

public static void g(MyInterface obj)
{
  obj.f();
}

有关接口的更多详细信息,请查看 Java 文档:什么是接口?

相关内容

最新更新