有没有什么方法可以指定扩展多个类中任何一个类的java泛型类型变量?

时间:2014-11-15 16:02:45

标签: java generics

假设我有两个班级:

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不是&#34; T扩展A&amp;的有效替代品。 B&#34;,我假设是因为T必须延伸A和B,显然A不会。我找不到一种方法来指定像&#34; T扩展A或B&#34;。这样的事情是不可能实现的吗?我是一个java新手,所以对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您只能指定一种通用类型。 改为使用界面。

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

在您的示例中,我将使用方法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文档:What Is an Interface?