假设我有 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();
}
让A
和B
实现接口:
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 文档:什么是接口?