假设我有两个班级:
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新手,所以对此有任何帮助将不胜感激。
答案 0 :(得分:1)
您只能指定一种通用类型。 改为使用界面。
接口指定一组特定的方法,每个方法的成员必须具有。一个类可以实现多个接口。
在您的示例中,我将使用方法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文档:What Is an Interface?